以下声明:
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(100) NOT NULL,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
address VARCHAR(255) NOT NULL,
phone_number VARCHAR(20) NOT NULL
);
不会导致username
拥有UNIQUE
约束。
my_db=# \d users
Table "public.users"
Column | Type | Modifiers
--------------+------------------------+----------------------------------------------------
id | integer | not null default nextval('users_id_seq'::regclass)
username | character varying(50) | not null
password | character varying(100) | not null
first_name | character varying(50) | not null
last_name | character varying(50) | not null
address | character varying(255) | not null
phone_number | character varying(20) | not null
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
问题
我没有在文档中找到UNIQUE
的任何限制。我错过了什么?
上下文
PostgreSQL在官方PostgreSQL Docker container
上运行答案 0 :(得分:0)
@wildplasser和@dmg是正确的,IF NOT EXISTS
部分不会覆盖现有表,并且不会应用更改。因此,删除它将解决在非容器化数据库实例上的问题。
在目前的问题上,我不得不使用新的SQL脚本(添加UNIQUE
约束)重建我的容器(创建一个新图像)。这解决了这个问题。
仅停止并重新运行Docker容器不会应用SQL脚本。在official PostgreSQL Docker image上, init SQL脚本在创建图像时运行(又名docker build
)。
因此,对于SQL脚本中的每个更改,我必须运行docker build my_db_container
以删除旧图像并重新创建。
感谢所有的评论,这些评论让我找到了解决方案的方向。