PostgreSQL UNIQUE约束没有应用在Docker容器上
以下声明:
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 Docker容器上的PostgreSQL
@wildplasser和@dmg是正确的, IF NOT EXISTS
部分不会覆盖现有的表并且不会应用更改。 所以放弃,将解决非容器化数据库实例的问题 。
在目前的问题上,我不得不用新的SQL脚本(添加UNIQUE
约束)来重build我的容器(创build一个新的图像)。 这解决了这个问题。
仅仅停止并重新运行Docker容器不会应用SQL脚本。 在官方的PostgreSQL Docker镜像中 , init SQL脚本在镜像创build时运行 (也就是docker build
)。
所以对于SQL脚本中的每一个变化,我都必须运行docker build my_db_container
来摆脱旧的映像,并有一个新的。
感谢所有的评论,让我find解决scheme的方向。