为什么 SQL 语法在将本地 Postgres 恢复到 AWS RDS 后发生变化?

Why did SQL syntax change after restoring local Postgres onto AWS RDS?

问题

一个简单的 2x2 table 数据解释了我的问题。两个数据库都可以工作,但它们的行为不同,我需要它们相同。

 PostreSQL Query           |  Local DB  |  Amazon-RDS                             |
 --------------------------+------------+-----------------------------------------+
 SELECT * from mydb.users; |  Success   |  Success                                |
 --------------------------+------------+-----------------------------------------+
 SELECT * from users;      |  Success   |  ERROR: relation "users" does not exist |
 ---------------------------------------------------------------------------------+

详情

  1. 数据库应该相同。 Amazon-RDS 实际上是 pg_restore 来自本地数据库的 pg_dump。确切的命令:

    $ pg_dump --format=c ---no-privileges --no-owner --verbose \
             --host=localhost --port=5432 --username=gary mydb;
    
    $ pg_restore --no-owner --no-tablespaces --dbname=mydb --verbose \
       --host=127.0.0.1 --port=47737 \ #ssh tunnel
       --username=XXXXXX --format=c
    
  2. 问题不在于数据转储本身。我已经擦除本地数据库,从转储中恢复它,它仍然按照预期的方式运行。
  3. 问题不仅仅体现在我的原始 SQL 查询中,还有一个相当大的 Node/Express 应用程序应该作为数据库的前端。它也会生成 table 前面没有数据库前缀的查询。该应用程序使用 Sequelize 作为 ORM,并已 运行 MySQL 在 Amazon-RDS 上 生产多年。我现在看到的问题只在从 MySQL 迁移到 PostgreSQL.
  4. 时出现
  5. 我没有使用 Postgres 的经验。
  6. 我认为这无关紧要,但坦白说,我正在使用 DBeaver 处理我所有的数据库连接,并进行数据库转储和恢复。

问题

  1. 为什么一个数据库仅从 table 的名称就可以成功推断出数据库,而另一个却不能?
  2. 是否有配置设置可以让它们同时工作? mydb是RDS实例中唯一的数据库。

mydb 不是数据库,它是模式。而且它似乎不是 in the schema search_path 在 RDS 上。

可以在集群设置、数据库设置、(登录)用户设置或本地 DBeaver 连接中进行配置。