У меня есть простая таблица в PostgreSQL, которая имеет три столбца:
- id первичный ключ
- ключ varchar
- значение varchar
Я уже видел этот вопрос здесь на SO: Вставить, при дублировании обновления в PostgreSQL?, но мне интересно, как получить идентификатор, если он существует, вместо обновления. Если стандартная практика заключается в том, чтобы всегда "вставлять" или "обновлять, если существует", почему? Является ли стоимость выполнения SELECT (LIMIT 1) больше, чем выполнение ОБНОВЛЕНИЯ?
У меня есть следующий код
INSERT INTO tag
("key", "value")
SELECT 'key1', 'value1'
WHERE
NOT EXISTS (
SELECT id,"key","value" FROM tag WHERE key = 'key1' AND value = 'value1'
);
который работает в том смысле, что он не вставляет, если существует, но я хотел бы получить идентификатор. Есть ли предложение "RETURNING id" или что-то подобное, что я мог бы там нажать?