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