同じ構造のテーブルがたくさんあるPostgreSQLデータベースがあり、合計36列です。
CREATE TABLE some_schema.some_table (
id integer NOT NULL DEFAULT nextval('some_schema.id_seq'::regclass),
col2,
col3,
col4,
[...],
col35,
mi_prinx integer NOT NULL DEFAULT nextval('some_schema.mi_prinx_seq'::regclass),
CONSTRAINT some_table_pkey PRIMARY KEY (mi_prinx)
)
多くの場合、同じ構造を持つ別のテーブルからレコードを挿入する必要があります。
INSERT INTO some_schema.some_table (col2,col3...col35)
SELECT col2,col3...col35
FROM some_schema.another_table_with_same_structure;
デフォルト値を持たないすべての列をリストする必要なしにこれを行う方法はありますか? DEFAULT VALUES
どういうわけか documentation に基づいて正しい構文を取得できません。
デフォルト値を持たないすべての列をリストする必要なしにこれを行う方法はありますか?
いいえ、*
拡張を使用してすべての列を挿入することも、
INSERT INTO foo
SELECT * FROM bar;
または、リストされた列だけを挿入します
INSERT INTO foo (col2,col3)
SELECT col2, col3
FROM bar;
明示的にDEFAULT
を使用することもできますが、誰もそれを行いません。ただし、仕様に含まれています明示的または暗黙的な列リストに存在しない各列には、宣言されたデフォルト値または存在しない場合はnullのいずれかのデフォルト値が入力されます。明示的であることは次のようになります。
INSERT INTO foo (col1,col2,col3)
SELECT DEFAULT, col2, col3
FROM bar;
DEFAULT COLUMNS
は、すべての列をそれぞれのデフォルトに設定します。 DEFAULT COLUMNS
のドキュメントから、
DEFAULT VALUES、すべての列はデフォルト値で埋められます。
CREATE TABLE foo (id serial, foo serial, bar serial);
INSERT INTO foo (id,foo,bar) VALUES (DEFAULT, DEFAULT, DEFAULT);
INSERT INTO foo DEFAULT VALUES;
INSERT INTO foo(id,foo,bar) VALUES (42,42,DEFAULT);
TABLE foo;
id | foo | bar
----+-----+-----
1 | 1 | 1
2 | 2 | 2
42 | 42 | 3
(3 rows)