【问题标题】:Connecting to Aurora Postgres (Babelfish, 1433)连接到 Aurora Postgres (Babelfish, 1433)
【发布时间】:2022-01-09 00:58:05
【问题描述】:

我正在尝试连接到启用了 Babelfish 的新 Aurora PostgreSQL 实例。

注意:我可以使用 pg 库通过普通端口 5432(Postgres TDAS 端点)连接到实例。

但是,对于这个测试,我正在尝试使用标准 mssql 包通过 Babelfish TDS 端点 (1433) 进行连接。

如果我指定一个数据库名称(它是正确的),我会收到错误“数据库“postgres”不存在”:

var config = {
    server: 'xxx.us-east-1.rds.amazonaws.com',
    database: 'postgres',
    user: 'xxx',
    password: 'xxx'
};

由于连接失败,连接关闭。

如果我在配置中省略了数据库属性,例如:

var config = {
    server: 'xxx.us-east-1.rds.amazonaws.com',
    user: 'xxx',
    password: 'xxx'
};

它将连接。此外,我可以使用该连接来查询 SELECT CURRENT_TIMESTAMP 之类的基本内容,并且可以正常工作!

但是,我无法访问任何表格。

如果我跑:

SELECT COUNT(1) FROM PERSON

我收到一条错误消息“关系“人”不存在”。

如果我用点注释:

SELECT COUNT(1) FROM postgres.dbo."PERSON"

我收到“不支持跨数据库查询”错误。

所以,我不能直接连接到特定的数据库,如果我在没有指定数据库的情况下连接,我不能交叉查询到表。

有人做过吗?

或者,如果没有,有什么想法可以帮助我弄清楚接下来要尝试什么?我没有想法。

【问题讨论】:

    标签: node.js postgresql babelfish


    【解决方案1】:

    Babelfish 数据库(您连接到端口 1433)与 PostgreSQL 数据库(端口 5432)无关。本质上,所有 Babelfish 都存在于一个 PostgreSQL 数据库中(参数 babelfishpg_tsql.database_name)。

    你似乎有一个single-db 设置,因为Cross DB query is not supported。通过这样的设置,您只能通过端口 1433 拥有一个数据库(mastertempdb 除外)。您必须使用 CREATE DATABASE 来创建单个数据库(如果尚未创建;询问 sys.databases)。

    我不知道是否支持在 PostgreSQL(端口 5432)中创建表并在端口 1433 上使用它(反之亦然),但如果是这样,您必须在一个架构中创建它您在连接到端口 1433 时使用 CREATE SCHEMA 创建。

    【讨论】:

    • 谢谢,劳伦兹!我一定是误解了通过 Babelfish 连接应该做什么。那么,我应该在 babelfish_db 数据库下创建我的表吗?
    • 是的,我认为这是他们的名字。
    • 如果我在连接中指定数据库名称,我仍然收到'数据库“babelfish_db”不存在'。如果我不这样做,我会收到“找不到用户“postgres”的默认数据库”。
    • 不,babelfish_db 是 PostgreSQL 数据库。您必须连接到 Babelfish 中的 master,然后创建您的数据库。这很混乱。
    • 你会在哪里创建表格? babelfish_db > 公共 > 表格 > (这里)?
    【解决方案2】:

    答案是我应该连接到数据库“master”。

    即使实例中没有名为 master 的数据库,您仍然可以连接到它。

    连接后,运行以下命令:

    select current_database();
    

    这将表明您已连接到数据库“babelfish_db”。

    我不知道它是如何工作的,也不知道为什么数据库会有一个未记录的别名。

    【讨论】:

    • 请注意,'select current_database()' 不是 T_SQL - 它实际上是一个 PG 函数,恰好可以从 TSQL 调用。这仅告诉您您已连接到此 PG 数据库;从 T-SQL 的角度来看,它与模拟“当前 SQL Server 数据库”(根据 db_name())的世界 T-SQL 视图无关
    【解决方案3】:

    这里更大的答案是 Babelfish 当前不支持跨数据库对象引用,在您当前的 SQL Server 数据库之外。 目前正在对此进行处理。敬请期待。

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 2020-05-30
      • 2018-03-01
      相关资源
      最近更新 更多