我建议创建一个临时表,然后使用简单的更新查询从那里填充 person 表。
数据样本
CREATE TABLE public.person(
name text,
details text,
something_else text);
INSERT INTO person (name) VALUES
('foo'),('bar');
CREATE TABLE public.tmp_person(
name text,
details text);
CSV 文件内容:
name, details
foo, det1
bar, det2
将 csv 文件导入tmp_person,例如通过psql:
$ cat file.csv | psql -d mydb -U myuser -c "COPY tmp_person FROM STDIN CSV HEADER"
然后更新您的person 表:
UPDATE person SET details = tmp.details
FROM tmp_person tmp WHERE tmp.name = person.name;
最后,表格 person 将包含来自 csv 文件的 details,因此您可能想要 DROP TABLE tmp_person。
SELECT * FROM person;
name | details | something_else
------+---------+----------------
foo | det1 |
bar | det2 |
(2 Zeilen)