sql - PostgreSQL 自动递增不使用 COPY 递增

标签 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

然后我的主键没有递增,所以之后调用:

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/

相关文章:

c# - SQL 参数和问号

sql - postgres中函数内的准备语句

postgresql - 带有空参数的 JPA NamedQuery

php - 有条件的按计数排序

mysql - 如何从 VARCHAR 转换为 DATE

sql - 主键的顺序扫描和索引扫描返回不同的行

对具有 from 至 条目的表进行 SQL 联接

postgresql - Postgres 排序顺序错误

sql - 替换特定字段中的不正确日期

c# - 将 Npgsql 文本类型转换为 C# 类型