У меня есть пользователь, вводящий список значений, к которым мне нужно запросить в таблице. Список может быть потенциально очень большим, а длина неизвестна во время компиляции. Вместо того, чтобы использовать WHERE ... IN (...)
, я подумал, что было бы эффективнее использовать временную таблицу и выполнить соединение с ней. Я прочитал это предложение в другом вопросе SO (не могу найти его в данный момент, но буду редактировать, когда я это сделаю).
Суть что-то вроде:
CREATE TEMP TABLE my_temp_table (name varchar(160) NOT NULL PRIMARY KEY);
INSERT INTO my_temp_table VALUES ('hello');
INSERT INTO my_temp_table VALUES ('world');
//... etc
SELECT f.* FROM foo f INNER JOIN my_temp_table t ON f.name = t.name;
DROP TABLE my_temp_table;
Если бы два из них работали одновременно, я не получил бы ошибку, если поток 2 пытается создать таблицу TEMP после потока 1?
Должен ли я случайно генерировать имя для таблицы TEMP вместо этого?
Или, если я заверну все это в транзакции, исчезнет ли конфликт имен?
Это Postgresql 8.2.
Спасибо!