我有一个适用于单项检查的 SQL 查询:
SELECT trans_id from schema.table where trans_id like '%<trans_id>%'
可能有更好的查询方法,但这不是重点。
数据库有大约。150k 个条目,如果 trans_id 存在,我应该检查其中的 30k 个。我面临的问题是,我不知道加入的正常方法是否有效,因为必须从中查询的 trans_id 不在数据库中(不幸的是 excel :/)。
我不允许将它们添加到数据库中以加入它们。
我的想法是创建某种我通过 psql 触发的脚本: (researched) psql -U postgres -d database -o /absolute_path/textfile.txt << EOF Query1; 查询2;询问 ....; EOF
但在我的预期中,这将导致将 30k 行的 select 语句写入 EOF 部分。我怀疑这是否有效,甚至不谈论努力。
还应将输出路由到本地文件,该文件显示:
- trans_id 存在
- trans_id 不存在
也许一些带有数组的循环?但我现在不知道如何。
表现首先不是我的目标。
VALUES
您可以通过子句传递成批的值,甚至是查询中的所有 30k 值。这是查询只读服务器时的常见做法。查询可能如下所示:
请注意,模式不应包含
%
or_
,或者在与 一起使用之前应将其转义like
。与'
注入VALUES
子句的值相同。EXISTS (subquery)
返回一个布尔值,将显示为t
或f
根据此列中的字符串长度和内容类型,使用它可能会更快,
strpos(trans_id, pattern)>0
而不是trans_id like '%'||pattern||'%'
.pattern
如果不包含通配符,但通过不同的算法,两者都会产生相同的结果:递归模式匹配与回溯like
与Boyer-Moore-Horspool算法的strpos
.Daniel Verite 的询问真的很有帮助。不幸的是,在大约 20 秒的查询运行时间后,我遇到了超时性能问题。由于我不允许调整配置我写了一个循环脚本来解决这个问题。
这最符合我的目的:
解决方案如下: -> 创建一个 conf 文件当然提供所有参数 -> 使用 psycopg2 通过 postgres 和 python 连接数据库 -> numpy 用于处理 I/O 文件
当然,您可以摆脱所有故障保护,但我认为它很有用。