PostgreSQL UNIQUE约束未应用于Docker容器

时间:2016-04-06 14:47:07

标签: postgresql docker constraints unique-constraint

以下声明:

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

上运行

1 个答案:

答案 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以删除旧图像并重新创建。

感谢所有的评论,这些评论让我找到了解决方案的方向。