我在 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
然后我的主键
没有递增,所以之后调用:
insert into cars (car_id) values (11)
失败:
ERROR: duplicate key value violates unique constraint "cars_pkey"
DETAIL: Key (id)=(1) already exists.
最佳答案
这个问题很容易解决,如下,你可以在复制数据到你的表后设置序列的起始值(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}"
当然,你可以添加一些告警代码来保证健壮性。然后你可以给脚本设置一个调度器来达到你一个月两次的目标。
关于sql - PostgreSQL 自动递增不使用 COPY 递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56216861/