如何将双引号传递给复合类型的数组?
当我用斜杠转义双引号“时,似乎postgres将其删除。
我的服务器的standard_conforming_strings设置为ON。
使用此复合类型:
CREATE TYPE public.type_strings AS (
string_one VARCHAR(500),
string_two VARCHAR(1000)
);
并运行以下代码块:
DO $$
DECLARE
v_strings public.type_strings[] := '{"(One,string with \"quotes\")","(Two,string with \\\\slash\\\\ + ''apos'' + \\,comma\\, + (parens\\))"}';
BEGIN
DROP TABLE IF EXISTS _results;
CREATE TEMPORARY TABLE _results AS
SELECT
string_one,
string_two
FROM UNNEST(v_strings) x(
string_one,
string_two);
END $$;
SELECT * FROM _results;
产生以下结果:
string_one string_two
---------- -------------------------------------------------
One string with quotes
Two string with \slash\ + 'apos' + ,comma, + (parens)
请注意第一行中缺少双引号。我想知道如何对双引号进行转义,以便保留双引号,如下所示:
string_one string_two
---------- -------------------------------------------------
One string with "quotes"
Two string with \slash\ + 'apos' + ,comma, + (parens)
感谢您的帮助,谢谢!
答案 0 :(得分:1)
使用三个转义的双引号:
select *
from unnest('{"(One,string with \"\"\"quotes\"\"\")","(Two,unimportant)"}'::type_strings[]);
string_one | string_two
------------+----------------------
One | string with "quotes"
Two | unimportant
(2 rows)
还有更令人愉快的语法:
select *
from unnest (array[('One', 'string with "quotes"'), ('Two', 'unimportant')]::type_strings[]);
尽管如此,在Postgres中使用复合类型的数组是一种折磨的方法,浪费时间和精力。数据库世界中有更自然,更有效和更简单的替代方法。我鼓励您尝试找到它们。