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
