web-dev-qa-db-ja.com

Postgresqlでプログラム的にDDLを生成する

プログラムでテーブルのDDLをPostgresqlで生成するにはどうすればよいですか?それを行うためのシステムクエリまたはコマンドはありますか?問題をグーグルで調べても、ポインターは返されませんでした。

29
ruipacheco

答えは、pg_dumpのソースコードを確認し、DDLを生成するために使用するスイッチに従ってください。コード内のどこかに、DDLの生成に使用されるメタデータを取得するために使用されるいくつかのクエリがあります。

3
ruipacheco

使用する 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"をググリングしてこのスレッドにリダイレクトしたかを確認したいだけです。

33
Brain90

pg_dump データベースの内容(スキーマとデータの両方)をダンプするコマンド。 --schema-onlyスイッチは、テーブルのDDLのみをダンプします。

19
Greg Hewgill

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)
3
Wayne Conrad

I 4つの関数を保存 モックアップするpg_dump -s部分的に動作します。に基づく \d+メタコマンド。使用法は同じようになります:

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

もちろん、事前に関数を作成する必要があります。

ここは試験会場のサンプル

2
Vao Tsun

Information_schemaからメタ情報を取得する方法についての良い記事 http://www.alberton.info/postgresql_meta_info.html を以下に示します。

2
iavci