Почему синтаксис SQL изменился после восстановления локальных Postgres на AWS RDS? - PullRequest
0 голосов
/ 13 октября 2019

Проблема

Простая таблица данных 2x2 объясняет мою проблему. Обе базы данных можно заставить работать, но они ведут себя по-разному, и мне нужно, чтобы они были одинаковыми.

 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 /Экспресс приложение, которое предполагается для фронт-энда базы данных. Он также генерирует запросы без префикса базы данных перед таблицами. Приложение использует Sequelize для ORM и уже много лет работает с MySQL на Amazon-RDS. Проблема, с которой я столкнулся сейчас, появилась только при переходе с MySQL на PostgreSQL.
  4. У меня нет опыта работы с Postgres.
  5. Не думаю, что это должно иметь значение, но в полном раскрытии я использую DBeaver для обработки всех моих соединений с базой данных, а также для выполнения дампа и восстановления базы данных.

Вопросы

  1. Почему одна база данных успешно выводит базу данных из имени одной таблицы, а другая не может?
  2. Есть ли где-нибудь параметр конфигурации, чтобы заставить их работать? mydb является единственной базой данных в экземпляре RDS.

1 Ответ

2 голосов
/ 14 октября 2019

mydb это не база данных, это схема. И похоже, что это не в схеме search_path на RDS.

Это можно настроить в настройках кластера, настройках вашей базы данных, настройках вашей (логин)пользователь или локально на соединении DBeaver.

...