Я хочу сделать что-то вроде этого:PostgreSQL - транзакции обеспечивают атомарность?
SELECT * FROM TABLE where *condition*
... TEST for a row being returned
IF NOT
INSERT the row
Другими словами, я только хочу, чтобы вставить строку в таблицу, если она еще не существует. Меня беспокоит то, что пока я тестирую результирующий набор, на самом деле строка может быть вставлена другим процессом. Я не знаю этого, и две строки будут вставлены. Я не хочу, чтобы это произошло.
Я думал об упаковке двух операторов в транзакции, но я подозреваю, что это не ответ; Я не знаю, имеют ли транзакции эффект, подобный блокировке таблицы во время их выполнения, тем самым предотвращая любые другие вставки между моими SELECT и INSERT? Это вопрос.
Я подозреваю, что лучший способ сделать это - просто установить уникальный ключ по столбцам в строке и тем самым предотвратить дублирование вставок. Но мне все еще интересно, действительно ли моя идея об использовании транзакций действительна или дико отключена?