[英]How to insert multiple default rows into a table in PostgresQL
我有一個表,列中的列采用默認值:
create table indexing_table
(
id SERIAL PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
);
如何在此表中插入多個默認行? 我是否必須重復該命令:
insert into indexing_table default values;
我想要插入多少次?
我有同樣的問題。 有頭表只包含序列生成的id。 我需要在快照表中插入行,當然我必須首先填充標題。 所以我有許多行的臨時表,並希望快速插入到兩個表。
循環很容易編寫,但它不是一種優化查詢的方法(在實現過程中,它在不同的數據庫/方案上運行了數千次)
可以使用特定值運行插入
INSERT INTO csh33 (id)
SELECT (SELECT last_value FROM csh33_id_seq) + row_number() OVER ()
FROM temp_tss11;
-- Primary key "id" is Serial so dont name it
INSERT INTO css33 (header_id, time_from, time_to, code, name)
SELECT (SELECT last_value FROM csh33_id_seq) + row_number() OVER (), now(), null, code, name, FROM temp_tss11;
SELECT setval('csh33_id_seq', (SELECT max(id) FROM csh33) + 1);
或者我不能用默認值命名字段
INSERT INTO csh33 SELECT FROM temp_tss11;
-- But must consider raised sequence in filling snapshot table (Don't care about ordering, so only subtract)
INSERT INTO css33 (header_id, time_from, time_to, code, name)
SELECT (SELECT last_value FROM csh33_id_seq) - row_number() OVER (), now(), null, code, name, FROM temp_tss11;
但是你的問題
INSERT INTO yourTableName SELECT generate_series(1,100)
注意我使用PG 9.4
如果您有默認值,則可以告訴數據庫使用此默認值:
INSERT INTO indexing_table(id, created_at)
VALUES(default, default),
(default, default),
(default, default);
如果您需要數百個默認記錄,並且其中一個默認值為“now()”,請使用generate_series():
INSERT INTO indexing_table(created_at)
SELECT NOW() FROM generate_series(1,100);
簡單的方法是將now()插入“created_at”列,如下所示:
insert into indexing_table (created_at)
select now()
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.