2

我有 2 个 Postgres 数据库,每个数据库都在它们自己的 CloudSQL 实例中,还有一个在 GKE 中运行的 .NET Web 应用程序。

目标:使用 EntityFramework Core 将 Web 应用程序连接到使用单个 CloudSQL 代理的两个 CloudSQL 实例。

我遵循了这个设置并按照这个SO 答案对其进行了修改。

每个 CloudSQL 实例都有一个 EF Core DbContext。使用 2 个环境变量设置上下文连接:

new Context1(
{
optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_1"));
});

new Context2(
{
optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_2"));
});

环境变量设置为:

CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"

CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"

当前行为:

Context1 与 CloudSQL instance1 正常交互。

Context2"42P01: relation {my_Table_Name} does not exist."在尝试访问表时抛出 PostgresException。

注意:"my_Table_Name"是 CloudSQL instance2 中的一个表

这让我相信 Context2 正在尝试访问 CloudSQL instance1 而不是 instance2。

如何通过 SQL 代理将 Context2 指向 CloudSQL instance2?

4

1 回答 1

1

基本上是这样的:

CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"

意味着您连接到完全相同的 Cloud SQL 实例,只是使用了两个不同的密码(相同的用户名)。不确定 CONNECTION_2 甚至可能如何连接到 Cloud SQL instance1。

你会想要这样的东西:

CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
CONNECTION_2 = "Host=127.0.0.1;Port=5433;Database=postgres;Username=postgres;Password=password2"

在您的 cloud-proxy 命令行上(在同一个 pod 上运行):

-instances=project:region:sqlinstance1=tcp:5432,project:region:sqlinstance2=tcp:5433
于 2018-11-08T22:45:32.940 回答