回答:
「pg_dump -t table -s」が実際に行うことをPostgreSQLログファイルでトレースすることができます。その後、同じメソッドを使用して独自のSQL関数を作成できます。
pg_dump:
pg_dump -st tablename dbname
またはPostgreSQL GUIツール(pgAdmin、phpPgAdminなど)を使用します
--schema-only
この正確な目的があります:スキーマ/テーブルを作成するSQLステートメントを表示します。この出力をC#プログラムに何らかの方法で送ることができます。
.tar
取得しrestore.sql
ます。すべての作成ステートメントがあります。
@CubicalSoftの回答の最初の部分に基づいて、単純なテーブルで動作する次の関数をドロップできます(デフォルトの「パブリック」スキーマを想定し、制約、インデックス、ユーザー定義のデータ型などを省略します)。@RJSの答えは、現時点で適切に行う唯一の方法です。これはpsqlに組み込まれるべきものです!
CREATE OR REPLACE FUNCTION show_create_table(table_name text, join_char text = E'\n' )
RETURNS text AS
$BODY$
SELECT 'CREATE TABLE ' || $1 || ' (' || $2 || '' ||
string_agg(column_list.column_expr, ', ' || $2 || '') ||
'' || $2 || ');'
FROM (
SELECT ' ' || column_name || ' ' || data_type ||
coalesce('(' || character_maximum_length || ')', '') ||
case when is_nullable = 'YES' then '' else ' NOT NULL' end as column_expr
FROM information_schema.columns
WHERE table_schema = 'public' AND table_name = $1
ORDER BY ordinal_position) column_list;
$BODY$
LANGUAGE SQL STABLE;
私はこのパーティーに少し遅れていることに気づきましたが、これは私のGoogle検索の最初の結果だったので、思いついたことに答えたいと思いました。
このクエリを使用して列を取得すると、ソリューションにかなり遠くまで到達できます。
SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;
そして、最も一般的なインデックスのこのクエリ:
SELECT c.oid, c.relname, a.attname, a.attnum, i.indisprimary, i.indisunique
FROM pg_index AS i, pg_class AS c, pg_attribute AS a
WHERE i.indexrelid = c.oid AND i.indexrelid = a.attrelid AND i.indrelid = 'YOURSCHEMA.YOURTABLE'::regclass
ORDER BY" => "c.oid, a.attnum
次に、適切な形式でクエリ文字列を作成します。
https://serverfault.com/a/875414/333439で回答されているように、\d <table>
メタコマンドを使用するpsql
と、データベースのテーブル構造を表示できます。メタコマンドで使用されるクエリを表示する場合は、コマンドを使用できますpsql -E
。マンページで説明されているように、-E
スイッチは\d
メタコマンドクエリをエコーします。したがって、起動できpsql -E
、\d <table>
メタコマンドでテーブル構造を-E
表示でき、スイッチに応じて、テーブル構造を記述するために生成されたクエリを表示できます
Postgres拡張機能ddlx(https://github.com/lacanoid/pgddl)は、これ以上のことを行います。