未在 Docker 容器上应用 PostgreSQL UNIQUE 约束
PostgreSQL UNIQUE constraint not being applied on Docker container
以下语句:
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
@wildplasser 和@dmg 是正确的,IF NOT EXISTS
部分不会覆盖现有的 table 并且不会应用更改。因此,删除它可以解决 在非容器化数据库实例 .
上的问题
在当前问题上,我不得不使用新的 SQL 脚本(添加了 UNIQUE
约束)重建容器(创建新映像)。那解决了问题。
仅仅停止并重新运行ing一个Docker容器并不应用SQL脚本。在 official PostgreSQL Docker image、 初始化 SQL 脚本 运行 上创建映像 (又名 docker build
)。
因此,对于 SQL 脚本中的每一次更改,我都必须 运行 docker build my_db_container
摆脱旧图像并获得新图像。
感谢大家的评论,让我找到了解决方案。
以下语句:
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
@wildplasser 和@dmg 是正确的,IF NOT EXISTS
部分不会覆盖现有的 table 并且不会应用更改。因此,删除它可以解决 在非容器化数据库实例 .
在当前问题上,我不得不使用新的 SQL 脚本(添加了 UNIQUE
约束)重建容器(创建新映像)。那解决了问题。
仅仅停止并重新运行ing一个Docker容器并不应用SQL脚本。在 official PostgreSQL Docker image、 初始化 SQL 脚本 运行 上创建映像 (又名 docker build
)。
因此,对于 SQL 脚本中的每一次更改,我都必须 运行 docker build my_db_container
摆脱旧图像并获得新图像。
感谢大家的评论,让我找到了解决方案。