我已经使用PostgreSQL创建了两个表,使用以下命令:
CREATE TABLE stores (
id SERIAL PRIMARY KEY,
store_name TEXT
);
CREATE TABLE products (
id SERIAL,
store_id INTEGER NOT NULL,
title TEXT,
image TEXT,
url TEXT UNIQUE,
added_date timestamp without time zone NOT NULL DEFAULT NOW(),
PRIMARY KEY(id, store_id)
);
ALTER TABLE products
ADD CONSTRAINT "FK_products_stores" FOREIGN KEY ("store_id")
REFERENCES stores (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE RESTRICT;
并且我想要实现的是每当我尝试插入URL时,
store_id=1 and url=http://pythonisthebest.com
store_id=2 and url=http://pythonisthebest.com
这不应该返回有一个重复的键值,这意味着我想有一个排序检查,看看何时在特定的store_id中存在一个URL,如果两个URL是相同的store_id,那么我应该得到重复的键错误,但否则,如果store_id是唯一的,URL是相同的,那么它不应该出现任何重复的错误。
我的问题是,使用postgresql是否有可能,或者是否需要用其他方式来处理?
编辑:
当然每当我们有两个相同的
store_id=1 and url=http://pythonisthebest.com
store_id=1 and url=http://pythonisthebest.com
则应返回错误键重复
- ———————————————————-
预期:
store_id=1 and url=http://pythonisthebest.com
store_id=2 and url=http://pythonisthebest.com
No duplicate key error
实际:
store_id=1 and url=http://pythonisthebest.com
store_id=2 and url=http://pythonisthebest.com
ERROR: duplicate key value violates unique constraint "product_url_key"
1条答案
按热度按时间lb3vh1jj1#
您需要表约束。可以使用