Как я могу генерировать DDL таблицы программно на Postgresql? Есть ли системный запрос или команда для этого? В googling проблема не указала указатели.
Генерировать DDL программно на Postgresql
Ответ 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)
Ответ 5
Вот хорошая статья о том, как получить метаинформацию из информационной схемы, http://www.alberton.info/postgresql_meta_info.html.
Ответ 6
I сохранено 4 функции, чтобы частично изменить поведение pg_dump -s
. На основе метакоманды \d+
. Использование будет аналогичным:
\pset format unaligned
select get_ddl_t(schemaname,tablename) as "--" from pg_tables where tableowner <> 'postgres';
Конечно, вам нужно создавать функции раньше.