Как я могу программно сгенерировать DDL таблицы в Postgresql? Есть ли системный запрос или команда для этого? Поиск в Google проблемы не дал никаких указателей.
Сгенерируйте DDL программно на Postgresql
Ответы (6)
Используйте 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 elon build.
$ pg_dump -U elon -h localhost -s -t spacex -t tesla -t solarcity -t boring > companies.sql
Извините, если не в тему. Просто хочу помочь тем, кто гуглил psql dump ddl и получил эту тему.
Вы можете использовать команду pg_dump
для создания дампа содержимого базы данных. (как схема, так и данные). Переключатель --schema-only
будет выводить только DDL для ваших таблиц.
pg_dump
устанавливается вместе с PostgreSQL и доступен на всех серверах. Для его использования не требуются специальные привилегии пользователя (обычные средства управления доступом PostgreSQL применяются к базе данных, которую вы выгружаете). Если вы не считаете это программным решением, вам придется указать, какую среду программирования вы используете, чтобы получить соответствующий ответ.
- person Greg Hewgill; 11.12.2009
Почему использование 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)
Ответ заключается в том, чтобы проверить исходный код pg_dump и следовать переключателям, которые он использует для создания DDL. Где-то внутри кода есть ряд запросов, используемых для извлечения метаданных, используемых для создания DDL.
Вот хорошая статья о том, как получить метаинформацию из информационной схемы, http://www.alberton.info/postgresql_meta_info.html.
Я сохранил 4 функции, чтобы частично смоделировать поведение pg_dump -s
. На основе метакоманды \d+
. Использование будет чем-то похожим:
\pset format unaligned
select get_ddl_t(schemaname,tablename) as "--" from pg_tables where tableowner <> 'postgres';
Конечно, вы должны создавать функции заранее.
Рабочий образец здесь, на rextester