如果您已经有一个包含所有数字的逗号分隔字符串,则可以使用准备好的语句 - 使用您使用的任何客户端的语法。普通 SQL 中的示例:
PREPARE myplan (text) AS
SELECT o.objectname, o.objecttype
FROM (SELECT unnest(string_to_array($1, ','))::int AS objectid) x
JOIN objecttable o USING (objectid);
EXECUTE myplan('1001, 1002, 1003');
或者,如果您从数据库服务器上的有效 CSV 文件开始,创建一个临时表,COPY
将数据写入其中(COPY
非常快),然后再JOIN
写入。
CREATE TEMP TABLE tmp_x (objectid int);
COPY tmp_x FROM '/path/to/my/file.csv';
SELECT o.objectname, o.objecttype
FROM tmp_x
JOIN objecttable o USING (objectid);
DROP TABLE tmp_x; -- optional; dropped automatically at end of session
如果您的文件在另一台机器上,请改用psql
's 元命令\copy
。
你肯定有索引objecttable.objectid
吗?这很关键。