У меня есть схема, как так:INSERT ... SELECT ошибки на не соответствия критериям запроса
CREATE TABLE user (
id uuid NOT NULL,
device_id uuid PRIMARY KEY NOT NULL
);
ALTER TABLE user ADD CONSTRAINT unique_ids UNIQUE (id);
CREATE TABLE hit (
initiator uuid NOT NULL,
target uuid NOT NULL
);
ALTER TABLE hit ADD CONSTRAINT initiator_fk FOREIGN KEY (initiator) REFERENCES user (id);
ALTER TABLE hit ADD CONSTRAINT target_fk FOREIGN KEY (target) REFERENCES user (id);
ALTER TABLE hit ADD CONSTRAINT unique_hits UNIQUE (initiator, target);
и INSERT
заявление, которое я хочу, чтобы вставить что hit
.
INSERT INTO hit (initiator, target)
SELECT user.id, $1
FROM user
WHERE user.device_id = $2;
Так что, когда один user
хочет hit
другой у меня initiator.device_id
и target.id
на руке. Этот запрос отлично работает в двух моих трех случаях (как допустимые значения, id invalid, device_id недействителен), так и последний; когда initiator.device_id
является недопустимым (несуществующим) значением. Результатом является оператор без ошибок, который оставляет меня для оценки затронутых строк (0). Я бы предпочел, чтобы это вернулось как нарушение ограничения, могу ли я это сделать?
Я использую PostgreSQL 9.3.