Подтвердить что ты не робот

Генерировать DDL программно на Postgresql

Как я могу генерировать DDL таблицы программно на Postgresql? Есть ли системный запрос или команда для этого? В googling проблема не указала указатели.

4b9b3361

Ответ 1

Ответ заключается в том, чтобы проверить исходный код для pg_dump и следовать за ключами, которые он использует для генерации DDL. Внутри кода есть несколько запросов, используемых для извлечения метаданных, используемых для генерации DDL.

Ответ 2

Используйте pg_dump с этими параметрами:

pg_dump -U user_name -h host database -s -t table_or_view_names -f table_or_view_names.sql

Описание:

-s or --schema-only : Dump only ddl / the object definitions (schema), without data.
-t or --table Dump :  Dump only tables (or views or sequences) matching table

Примеры:

-- dump each ddl table that elon build.
$ pg_dump -U elon -h localhost -s -t spacex -t tesla -t solarcity -t boring > companies.sql

Извините, если не в тему. Просто хочу помочь, кто погуглил "psql dump ddl" и перенаправил на эту ветку.

Ответ 3

Вы можете использовать команду pg_dump для сброса содержимого базы данных (как схемы, так и данных). Переключатель --schema-only будет выгружать только DDL для ваших таблиц.

Ответ 4

Почему обрезание psql не считается "программным"? Он очень хорошо сбрасывает всю схему.

Во всяком случае, вы можете получить типы данных (и многое другое) из information_schema (здесь указаны 8.4 документов, но это не новый функция):

=# select column_name, data_type from information_schema.columns
-# where table_name = 'config';
    column_name     | data_type 
--------------------+-----------
 id                 | integer
 default_printer_id | integer
 master_host_enable | boolean
(3 rows)

Ответ 6

I сохранено 4 функции, чтобы частично изменить поведение pg_dump -s. На основе метакоманды \d+. Использование будет аналогичным:

\pset format unaligned
select get_ddl_t(schemaname,tablename) as "--" from pg_tables where tableowner <> 'postgres';

Конечно, вам нужно создавать функции раньше.

Рабочий пример здесь в реестре