我在PostgreSQL
中有下表:
CREATE TABLE cars (id SERIAL PRIMARY KEY,
car_id SERIAL REFERENCES car_models (id) ON DELETE CASCADE);
将COPY
与以下内容一起使用时:
COPY cars FROM '/Users/my-user/cars.csv' DELIMITER ',' CSV HEADER;
包含:
id, car_id
1, 4
2, 3
3, 9
然后我的primary key
不会增加,因此请致电:
insert into cars (car_id) values (11)
失败:
ERROR: duplicate key value violates unique constraint "cars_pkey"
DETAIL: Key (id)=(1) already exists.
答案 0 :(得分:1)
解决此问题很容易,如下所示,您可以在将数据复制到表中后设置序列的起始值(your_now_max_value
,例如123)。
alter sequence cars_id_seq restart with your_now_max_value;
脚本外壳copy_cars.sh
可能有4行,如下所示:
psql -d database -c"copy cars from xx.txt with delimiter ','"
max_id=`psql -d database -c"copy(select max(id) from cars) to stdout"`
max_id=$(($max_id + 1))
psql -d database -c"alter sequence cars_id_seq restart with ${max_id}"
当然,您可以添加一些警报代码以确保其健壮性。然后,您可以为脚本设置一个调度程序,以实现每月两次的目标。
答案 1 :(得分:0)
有一个标志“ EXPLICIT_IDS”用于此目的。
尝试使用
COPY cars FROM '/Users/my-user/cars.csv' DELIMITER ',' CSV HEADER EXPLICIT_IDS;
希望这会有所帮助。