web-dev-qa-db-ja.com

1つのステートメントにPRIMARY KEYを指定したCREATE TABLE AS(PostgreSQL)

1つの "CREATE TABLE AS"ステートメントでプライマリキーを設定する方法はありますか?

例-次の記述を2文ではなく1文で作成したい

 CREATE TABLE "new_table_name" AS SELECT a.uniquekey, a.some_value + b.some_value FROM "table_a" AS a, "table_b" AS b WHERE a.uniquekey=b.uniquekey;
 ALTER TABLE "new_table_name" ADD PRIMARY KEY (uniquekey);

一般的にこれを行うより良い方法はありますか(2つ以上のテーブルがあると仮定してください、例えば10)?

38
TimY

マニュアルによると: テーブルの作成 および テーブルの作成 次のいずれかが可能です:

  • テーブルを作成主キーを最初に使用し、後でselect intoを使用
  • 最初にテーブルを作成最初に使用し、主キーを追加後で使用

しかし、両方ではありませんテーブルを作成主キー-あなたが望むもの。

44
peenut

別のテーブルと同じテーブル構造で新しいテーブルを作成する場合は、次のように1つのステートメントでこれを行うことができます(新しいテーブルの作成と主キーの設定の両方)。

create table mytable_clone (like mytable including defaults including constraints including indexes);
14
francs

いいえ、テーブルと主キーを作成する簡単な方法はありません。