我需要查询一个表中用户输入的值列表。这个列表可能非常大,而且长度在编译时是未知的。为了提高效率,我想使用一个临时表并对其执行连接操作,而不是使用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;
如果我同时有两个线程在执行,那么当第二个线程试图在第一个线程之后创建TEMP表时,会不会出现错误?
我是否应该随机生成一个TEMP表的名称呢?
或者,如果将整个操作包装在一个事务中,是否可以解决命名冲突?
这是Postgresql 8.2版本。
谢谢!