UNIQUE约束不在postgresql中的列上工作

时间:2017-04-08 14:52:10

标签: postgresql

以下是架构:

BEGIN;

DROP TABLE IF EXISTS contacts;

CREATE TABLE contacts (
  user_id SERIAL,
  first_name VARCHAR NOT NULL,
  last_name VARCHAR NOT NULL,
  email VARCHAR NOT NULL,
  phone_number VARCHAR NOT NULL,
  status VARCHAR NOT NULL,
  created_at TIMESTAMP DEFAULT current_timestamp,
  UNIQUE (phone_number, email)
);

COMMIT;

及以下是使用express和pg-promise在数据库中插入数据的代码:

function createContact(req, res, next) {
  db.none('insert into contacts(first_name, last_name, email, phone_number, status)' +
      'values(${first_name}, ${last_name}, ${email}, ${phone_number}, ${status})',
    req.body)
    .then(() => {
      res.status(200)
        .json({
          status: 'success',
          message: 'Inserted one contact',
        });
    })
    .catch(err => next(err));
}

UNIQUE约束似乎不适用于电子邮件列。我可以在电子邮件列中添加重复值。约束仅适用于电话号码。

我使用适用于Windows 10的EDB Postgres安装程序安装了数据库。我使用PGADMIN 4和PSQL Shell进行数据操作。

2 个答案:

答案 0 :(得分:5)

UNIQUE (phone_number, email)

告诉我,一对< phone_number,email>应该是唯一的,而不是单独的每一列。

尝试为单独的列设置唯一约束。

查看Constraints

答案 1 :(得分:2)

如果您有public void addCar(String car){ cars.add(car); } ,则表示touple UNIQUE (phone_number, email)必须是唯一的。因此,只要具有不同的电话号码,您就可以拥有重复的电子邮件(反之亦然)。

你想要这样的东西:(phone_number, email)