首页 > 解决方案 > 如何避免 PostgreSQL v 10 中的主键列重复?

问题描述

我正在运行一个脚本来更新表结构,我的问题是主键列(id),每次运行我的脚本时查询都会创建一个新的 id 列。

这是我第一次尝试编写脚本来更新数据库结构。数据库是由旧版本的应用程序创建的,现在我们想发布新版本的应用程序,但为了实现这个目标,我编写了一个脚本,总而言之,如果它们不存在,则创建表,将列添加到如果它们不存在,则删除旧索引并创建新索引等。

当脚本在表中添加主键时会出现问题,在数据库中,表具有整数类型的主键列。但是我的查询没有检测到这个主键列,它创建了一个具有相同名称和数据类型的新列,至少这是我在 PGAdmin v4.8 中看到的。

最初主键列是使用类型序列创建的,然后 PostgreSQL 自动创建一个序列并将其用作主键。

如何避免重复的主键列?

最初该列的创建如下

create table mytable(
id serial,
.
.
.
);

如果我查看表,列看起来像这样,这意味着 PostgreSQL 创建了一个序列 mytable_id_seq 并将其用于主键列的自动递增值。

id integer NOT NULL DEFAULT nextval('mytable_id_seq'::regclass)

但是在我执行以下查询并查看表后,它有一个与前几行中的名称和数据类型相同的新列。

ALTER TABLE public.mytable ADD COLUMN IF NOT EXISTS id serial;

无论我执行多少次查询,我都希望只看到一列。

标签: postgresql-10

解决方案


推荐阅读