MySQLのSHOW CREATE TABLE
に相当するものがPostgresにありますか?これは可能ですか?そうでない場合、次善の策は何ですか?
(WCFを介して)リモートサーバーにテーブルを作成するために使用するので、このステートメントが必要です。
「pg_dump -t table -s」が実際に何をしているのかをPostgreSQLログファイルで追跡することができます。その後、同じ方法を使用して独自のSQL関数を作成できます。
pg_dump:
pg_dump -st tablename dbname
またはPostgreSQL GUIツール(pgAdmin、phpPgAdminなど)を使用します。
コマンドライン(psql
)では、次のコマンドを実行できます:\d <table name>
は、すべての列、そのタイプ、およびインデックスをリストします。
@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 で回答されているように、psql
の\d <table>
メタコマンドを使用すると、データベースのテーブル構造を表示できます。メタコマンドで使用されるクエリを表示する場合は、psql -E
コマンドを使用できます。マンページで説明されているように、-E
スイッチは\d
メタコマンドクエリをエコーします。したがって、psql -E
を起動し、\d <table>
メタコマンドを使用してテーブル構造を表示し、-E
スイッチに従って、テーブル構造を説明するために生成されたクエリを表示できます。
pgAdmin 4 では、左側のツリーでテーブルを見つけるだけです。例:
Servers
+ PostgreSQL 11
+ Databases
+ MYDATABASENAME
+ Schemas
+ public
+ Tables
+ MYTABLENAME <-- click this tree element
テーブルが選択されたら、右側のSQLタブを開きます。 CREATE TABLE
選択したテーブル。
Postgres拡張ddlx( https://github.com/lacanoid/pgddl )はこれ以上のことを行います。