问题
一个简单的 2x2 数据表解释了我的问题。两个数据库都可以工作,但它们的行为不同,我需要它们相同。
PostreSQL Query | Local DB | Amazon-RDS | --------------------------+------------+-----------------------------------------+ SELECT * from mydb.users; | Success | Success | --------------------------+------------+-----------------------------------------+ SELECT * from users; | Success | ERROR: relation "users" does not exist | ---------------------------------------------------------------------------------+
Details
The databases should be identical. Amazon-RDS is literally
pg_restore
'd from apg_dump
of the local database. Exact commands:$ 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 应用程序应该作为数据库的前端。它也会生成表前没有数据库前缀的查询。该应用程序将 Sequelize 用于 ORM,并已在 Amazon-RDS 上与 MySQL 一起运行 生产多年。我现在看到的问题只是在从 MySQL 迁移到 PostgreSQL 时出现的。
- 我没有使用 Postgres 的经验。
- 我认为这无关紧要,但坦白说,我正在使用 DBeaver 处理我所有的数据库连接,并进行数据库转储和恢复。
问题
- 为什么一个数据库仅从表名就可以成功推断出数据库,而另一个却不能?
- 是否有配置设置可以让它们同时工作?
mydb
是RDS实例中唯一的数据库。
最佳答案
mydb
不是数据库,它是模式。而且它似乎不是 in the schema search_path
在 RDS 上。
它可以在集群设置、数据库设置、(登录)用户设置或本地 DBeaver 连接上进行配置。
关于postgresql - 为什么将本地 Postgres 恢复到 AWS RDS 后 SQL 语法发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58360022/