Назад | Перейти на главную страницу

Какие существуют форматы, альтернативные pg_dump, с целью сравнения схемы?

Мы храним pg_dump произвел схему DDL в нашем управлении версиями.

Мы находим, что сравнивая pg_dump Вывод до / после применения сценариев миграции дает лучшее представление о применяемых изменениях.

Однако проблема, с которой я столкнулся pg_dump вывод состоит в том, что соответствующие изменения объекта происходят по всему файлу. Поэтому в тот момент, когда у вас есть изменение, которое затрагивает несколько объектов в схеме, становится трудно увидеть связанные изменения.

Мне интересно, есть ли какие-либо альтернативные форматы, в которых я мог бы экспортировать схемы базы данных просто для их сравнения, например Я рассматриваю возможность использования psql для создания табличного представления объектов в формате ascii.

test=# \d+ question
                                                    Table "public.question"
    Column     |  Type   | Collation | Nullable |               Default                | Storage  | Stats target | Description
---------------+---------+-----------+----------+--------------------------------------+----------+--------------+-------------
 id            | integer |           | not null | nextval('question_id_seq'::regclass) | plain    |              |
 question      | text    |           | not null |                                      | extended |              |
 interest_id   | integer |           |          |                                      | plain    |              |
 slack_team_id | integer |           |          |                                      | plain    |              |
Indexes:
    "question_pkey" PRIMARY KEY, btree (id)
    "question_question_slack_team_id_idx" UNIQUE, btree (question, slack_team_id)
    "question_interest_id_idx" btree (interest_id)
    "question_slack_team_id_idx" btree (slack_team_id)
Foreign-key constraints:
    "question_interest_id_fkey" FOREIGN KEY (interest_id) REFERENCES interest(id) ON DELETE CASCADE
    "question_slack_team_id_fkey" FOREIGN KEY (slack_team_id) REFERENCES slack_team(id) ON DELETE CASCADE
Referenced by:
    TABLE "trivia_question" CONSTRAINT "trivia_question_question_id_fkey" FOREIGN KEY (question_id) REFERENCES question(id) ON DELETE CASCADE
Access method: heap

Вряд ли это ответ на мой вопрос, но я задокументирую то, что нашел:

  • просто используя \dt+ *.* для генерации psql-описания всей базы данных
  • https://www.schemacrawler.com/output.html генерирует удобную для различий схему в виде обычного текста, HTML и JSON.
  • http://schemaspy.org/ - не то, что я искал, но обнаружил, что это отличный способ документировать текущую схему.
  • https://github.com/keithf4/pg_extractor - извлекает каждый объект базы данных в свой собственный файл. Это то, что я в итоге использовал.

Я буду обновлять это, когда найду лучшие решения.