quote_nullable()
是一个系统函数,它将任意输入格式化为适当的带引号和转义的 SQL 字符串字面量。如果输入为 NULL
,则返回字符串 'NULL'
。
quote_nullable()
在 PostgreSQL 8.4 中添加。
用法
quote_nullable ( text ) → text
quote_nullable ( anyelement ) → text
由 quote_nullable()
返回的字符串适合用作 SQL 字符串中的字符串字面量。与 quote_literal()
相比,它不会返回 NULL
值(而是返回字符串 'NULL'
);这使得它适用于那些实际 NULL
值将使整个字符串无效的情况。有关更多详细信息,请参阅 示例 部分。
变更历史
- PostgreSQL 8.4
- 添加 (提交 7de81124)
示例
quote_nullable()
的基本用法示例
postgres=# SELECT quote_nullable('foo \''bar'); quote_nullable ---------------- E'foo \\''bar' (1 row)
非字符串数据类型将转换为 text
postgres=# SELECT quote_literal(42.195); quote_literal --------------- '42.195' (1 row)
如果提供的值为 NULL
,则返回字符串 'NULL'
postgres=# SELECT quote_nullable(NULL), quote_nullable(NULL) IS NULL; quote_nullable | ?column? ----------------+---------- NULL | f (1 row)
如果在 PL/pgSQL 中生成动态查询,并且任何被引用的值可能包含 NULL
,则 quote_literal()
将导致类似于以下内容的错误
postgres=# DO $$ BEGIN EXECUTE ' UPDATE foo SET val = ' || quote_literal(NULL) || ' WHERE id = ' || quote_literal(NULL); END; $$; ERROR: query string argument of EXECUTE is null CONTEXT: PL/pgSQL function inline_code_block line 3 at EXECUTE
因为将 NULL 值连接到字符串类型将导致 NULL 值,例如:
postgres=# SELECT 'foo ' || NULL || ' bar' IS NULL; ?column? ---------- t (1 row)
quote_nullable()
可以防止此问题
postgres=# DO $$ BEGIN EXECUTE ' UPDATE foo SET val = ' || quote_nullable(NULL) || ' WHERE id = ' || quote_nullable(NULL); END; $$; DO