PostgreSQL自动增量不使用COPY增量

时间:2019-05-20 08:20:20

标签: sql postgresql

我在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.

2 个答案:

答案 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;

希望这会有所帮助。