postgresにSHOW CREATE TABLEと同等のMySQLがありますか?


66

SHOW CREATE TABLEpostgresに相当するMySQLはありますか?これは可能ですか?そうでない場合、次に最適なソリューションは何ですか?

(WCFを介して)リモートサーバー上にテーブルを作成するために使用するため、ステートメントが必要です。


そして私は、MySQLは、すべてのクールな機能が不足してデータベース...だと思った
クリストファー・K.

回答:


27

「pg_dump -t table -s」が実際に行うことをPostgreSQLログファイルでトレースすることができます。その後、同じメソッドを使用して独自のSQL関数を作成できます。


OK、pg_dumpをトレースしました。しかし、C#で独自の関数を作成してcreate tableステートメントを記述する必要があるため、それほど簡単ではありませんでした。しかし、それは大きな助けだったので、veeeeerrrryyyyに感謝します。:D
vlebar

すべての問題に取り組む必要はありません- ここによれば-Epsqlコマンドを実行するときにバックグラウンドで何が起こっているかを追跡するオプションを使用できます-E: will describe the underlaying queries of the \ commands (cool for learning!)--HTH!
ベレース

40

pg_dump:

pg_dump -st tablename dbname

またはPostgreSQL GUIツール(pgAdmin、phpPgAdminなど)を使用します


私は問題をより詳細に説明しようとします。C#でsqlコマンド(NpgsqlCommand)を実行するため、sqlステートメント(selectまたはストアドプロシージャ)が必要です。したがって、この場合、pg_dumpは解決策ではないと思います。:(
vlebar

1
何故なの?--schema-onlyこの正確な目的があります:スキーマ/テーブルを作成するSQLステートメントを表示します。この出力をC#プログラムに何らかの方法で送ることができます。
スヴェン

information_schemaビューを見てください:postgresql.org/docs/9.0/interactive/information-schema.html
alvosu

1
@SvenW:既知のテーブルのセットがあれば、それを行います。問題は、ユーザーが選択した場合、選択したデータベース内のテーブルを同期し、wcfサービスの背後にあるリモートサーバー上で選択したテーブルを作成できることです。私はmssqlでそれを行うことができますが、クライアントプログラムを他のSQLサーバー(mysql、oracle、postgresqlなど)に拡張したいですplsqlでそれを行うことは可能な限り、私はplsqlでそれをしたい
-vlebar

1
にダンプする場合は、アーカイブからファイルを.tar取得しrestore.sqlます。すべての作成ステートメントがあります。
ジョセフラスト


4

@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;

これは受け入れられた答えでなければなりません
exebook

これありがとう!
フランク

3

私はこのパーティーに少し遅れていることに気づきましたが、これは私の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

次に、適切な形式でクエリ文字列を作成します。


2

https://serverfault.com/a/875414/333439で回答されているように、\d <table>メタコマンドを使用するpsqlと、データベースのテーブル構造を表示できます。メタコマンドで使用されるクエリを表示する場合は、コマンドを使用できますpsql -E。マンページで説明されているように、-Eスイッチは\dメタコマンドクエリをエコーします。したがって、起動できpsql -E\d <table>メタコマンドでテーブル構造を-E表示でき、スイッチに応じて、テーブル構造を記述するために生成されたクエリを表示できます


0

pgAdminで4、ちょうど左、例えば上のツリー内のテーブルを検索します:

Servers
+ PostgreSQL 11
  + Databases
    + MYDATABASENAME
      + Schemas
        + public
          + Tables
            + MYTABLENAME  <-- click this tree element

テーブルが選択されたら、右側の[SQL]タブを開きますCREATE TABLE選択したテーブルのが表示されます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.