为什么 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 |
---------------------------------------------------------------------------------+
详情
数据库应该相同。 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
- 问题不在于数据转储本身。我已经擦除本地数据库,从转储中恢复它,它仍然按照预期的方式运行。
- 问题不仅仅体现在我的原始 SQL 查询中,还有一个相当大的 Node/Express 应用程序应该作为数据库的前端。它也会生成 table 前面没有数据库前缀的查询。该应用程序使用 Sequelize 作为 ORM,并已 运行 MySQL 在 Amazon-RDS 上
生产多年。我现在看到的问题只在从 MySQL 迁移到 PostgreSQL.
时出现
- 我没有使用 Postgres 的经验。
- 我认为这无关紧要,但坦白说,我正在使用 DBeaver 处理我所有的数据库连接,并进行数据库转储和恢复。
问题
- 为什么一个数据库仅从 table 的名称就可以成功推断出数据库,而另一个却不能?
- 是否有配置设置可以让它们同时工作?
mydb
是RDS实例中唯一的数据库。
mydb
不是数据库,它是模式。而且它似乎不是 in the schema search_path
在 RDS 上。
可以在集群设置、数据库设置、(登录)用户设置或本地 DBeaver 连接中进行配置。
问题
一个简单的 2x2 table 数据解释了我的问题。两个数据库都可以工作,但它们的行为不同,我需要它们相同。
PostreSQL Query | Local DB | Amazon-RDS | --------------------------+------------+-----------------------------------------+ SELECT * from mydb.users; | Success | Success | --------------------------+------------+-----------------------------------------+ SELECT * from users; | Success | ERROR: relation "users" does not exist | ---------------------------------------------------------------------------------+
详情
数据库应该相同。 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
- 问题不在于数据转储本身。我已经擦除本地数据库,从转储中恢复它,它仍然按照预期的方式运行。
- 问题不仅仅体现在我的原始 SQL 查询中,还有一个相当大的 Node/Express 应用程序应该作为数据库的前端。它也会生成 table 前面没有数据库前缀的查询。该应用程序使用 Sequelize 作为 ORM,并已 运行 MySQL 在 Amazon-RDS 上 生产多年。我现在看到的问题只在从 MySQL 迁移到 PostgreSQL. 时出现
- 我没有使用 Postgres 的经验。
- 我认为这无关紧要,但坦白说,我正在使用 DBeaver 处理我所有的数据库连接,并进行数据库转储和恢复。
问题
- 为什么一个数据库仅从 table 的名称就可以成功推断出数据库,而另一个却不能?
- 是否有配置设置可以让它们同时工作?
mydb
是RDS实例中唯一的数据库。
mydb
不是数据库,它是模式。而且它似乎不是 in the schema search_path
在 RDS 上。
可以在集群设置、数据库设置、(登录)用户设置或本地 DBeaver 连接中进行配置。