web-dev-qa-db-ja.com

MySQLの同等のものはPostgresにありますか?

MySQLのSHOW CREATE TABLEに相当するものがPostgresにありますか?これは可能ですか?そうでない場合、次善の策は何ですか?

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

82
vlebar

「pg_dump -t table -s」が実際に何をしているのかをPostgreSQLログファイルで追跡することができます。その後、同じ方法を使用して独自のSQL関数を作成できます。

30
RJS

pg_dump:

pg_dump -st tablename dbname

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

49
alvosu

コマンドライン(psql)では、次のコマンドを実行できます:\d <table name>は、すべての列、そのタイプ、およびインデックスをリストします。

20

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

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

次に、正しい形式でクエリ文字列を構築することです。

6
CubicleSoft

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

2
Enrico Bianchi

pgAdmin 4 では、左側のツリーでテーブルを見つけるだけです。例:

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

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

0
Christopher K.

Postgres拡張ddlx( https://github.com/lacanoid/pgddl )はこれ以上のことを行います。

0
Žiga