web-dev-qa-db-ja.com

CREATE TABLE LIKE別のテーブルですが、追加の列があります

別のテーブルと同じ構造であるが追加の列を持つテーブルを作成する方法はありますか? この質問 から、次のコマンドでテーブルの構造をコピーできます。

CREATE TABLE new_table_name ( like old_table_name including all)

次に、ALTER TABLE new_table_name ADD COLUMN...を使用して一度に1つずつ列を追加できますが、次のように、これをより簡潔に行う方法を探しています。

CREATE TABLE new_table_name ( like old_table_name including all), new_col1 new_col1_type, new_col2 new_col2_type,...
7
Albert Rothman

以下の構文を使用できます。

CREATE TABLE old_table_name (
  id serial,
  my_data text,
  primary key (id)
);

CREATE TABLE new_table_name ( 
  like old_table_name including all,
  new_col1 integer, 
  new_col2 text

);

フィドルは here です

17
Sahap Asci

いいえ、これを行うための簡潔な方法はありません。だが ALTER TABLEは複数の引数を受け入れることができ、

ALTER TABLE foo
  ADD column bar int,
  ADD column baz int;

実際、目標が簡潔であれば、SQLが理想的な言語になることはほとんどありません。

3
Evan Carroll

CREATE TABLE AS <query>オプション。詳細は ドキュメント を参照してください。

-コードはPostgreSQLでテストされていません-

    CREATE TABLE MyNewTable
    AS
    SELECT *, CAST (NULL AS INT) AS IntCol1, CAST( NULL AS VARCHAR(10)) AS StrCol2...
    FROM MyOriginalTable 
     WITH NO DATA;
3
SQLRaptor