我已經將一個.csv檔案匯入到我的資料庫表中。
它有三列,例如
(numbers, first_name, last_name)
numbers 列的行從 1 到 200。
現在,我想將一個新.csv檔案匯入同一個表中。我每天都會這樣做。每次行從 1 開始到某個數字。
新.csv檔案的“數字”值從 1 開始到 500。
當我匯入新.csv檔案時,它需要從 201 繼續。它不應該更新或洗掉舊行。反之亦然,它需要從 201 繼續行。
我該怎么做?請幫我。
uj5u.com熱心網友回復:
由于您永遠不想使用 CSV 檔案提供的值,因此定義numbers為一identity列:
create table the_table
(
numbers integer not null generated always as identity,
first_name text,
last_name text
);
然后當你匯入 CSV 時,只匯入first_name和last_name. 您如何執行此操作取決于您用于匯入檔案的工具。不幸的是,內置copy命令或 psql\copy只能匯入檔案的某些列。您還可以將此應用于已包含資料的現有表。
如果您不能只匯入某些列,您可以創建一個始終通過觸發器使用的序列。這將有效地忽略為數字列提供的任何值:
create sequence numbers_seq
start with 201; --<< or whatever you need depend
create table the_table
(
numbers integer not null,
first_name text,
last_name text
);
create function set_number()
returns trigger
as
$$
begin
new.numbers := nextval('stuff.numbers_seq');
return new;
end;
$$
language plpgsql;
create trigger populate_numbers_trigger
before insert on the_table
for each row
execute procedure set_number();
在匯入期間(實際上是任何INSERT),無論 INSERT 陳述句中指定了什么,都將始終從序列中獲取值。這獨立于任何工具作業。然而,觸發器比identity列稍慢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380158.html
標籤:sql PostgreSQL的
