为了检测hstore中是否存在密钥,我需要运行如下查询:

SELECT * FROM tbl WHERE hst ? 'foo'

然而,这给了我一个例外:

PDOException: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound: SELECT * FROM tbl WHERE hst ? 'foo'

有没有办法避开问号,这样PDO就不会把它当成占位符了?我试过用最多四个反斜杠,以及一个双问号(??),但似乎没有什么能说服PDO不要使用问号.

推荐答案

使用函数调用表单.根据系统目录,hstore ?运营商使用exist功能:

regress=# select oprname, oprcode from pg_operator where oprname = '?';
 oprname | oprcode 
---------+---------
 ?       | exist
(1 row)

所以你可以写:

SELECT * FROM tbl WHERE exist(hst,'foo');

(就我个人而言,我不太喜欢以操作员为中心的hstore设计和文档,我认为它抛弃了基于函数的界面的有用的自文档属性,没有任何真正的好处,我通常使用它的函数调用,而不是它的运算符.仅仅因为你可以定义运算符并不意味着你应该这样做.)

Postgresql相关问答推荐

函数返回查询执行plpgsql时不存在列

如何在PSQL中查询jsonb列包含字符串的嵌套数组

Postgres:一次插入多行时自定义upsert(存储过程?)?

Upper() 不会大写重音字符

如何在 postgresql 上使用 sqlalchemy 进行正确的 upsert?

如何从 .sql postgresql 备份恢复单个表?

如何在 Postgres 中的列上删除唯一约束?

在 PostgreSQL docker 镜像中创建表

如何在容器内创建 postgres 扩展?

在远程机器上Restore dump

Psycopg2 使用占位符插入表格

将主键更改为自动递增

在 PostgreSQL 中显示正在运行的查询的全文

如何将参数值添加到 pgadmin sql 查询?

当成功有时会导致退出代码为 1 时,如何可靠地确定 pg_restore 是否成功?

如何使用 Django Migrations 重新创建已删除的表?

在 Postgresql 中按窗口函数结果过滤

在 postgres 中存在不同的 string_agg 问题

PostgreSQL 无法启动:server.key具有组或世界访问权限

错误:索引表达式中的函数必须在 Postgres 中标记为 IMMUTABLE