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的方向。

Interesting Posts