Postgresql 如何在复合类型的Postgres数组中存储双引号?
如何将双引号传递给复合类型的数组 当我用斜杠“退出双引号时,postgres似乎将其删除 我的服务器已设置标准\u字符串 使用此复合类型:Postgresql 如何在复合类型的Postgres数组中存储双引号?,postgresql,plpgsql,Postgresql,Plpgsql,如何将双引号传递给复合类型的数组 当我用斜杠“退出双引号时,postgres似乎将其删除 我的服务器已设置标准\u字符串 使用此复合类型: CREATE TYPE public.type_strings AS ( string_one VARCHAR(500), string_two VARCHAR(1000) ); 并运行这段代码: DO $$ DECLARE v_strings public.type_strings[] := '{"(One,string with
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)
感谢您的帮助!使用三个转义双引号:
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中使用复合类型的数组是一种痛苦的方式,是一种时间和精力的浪费。在数据库世界中有更自然、更有效和更简单的替代方法。我鼓励您尝试找到它们。“在Postgres中使用复合类型的数组是[…]时间和精力的浪费“-我完全同意@klin我们的服务使用复合类型的数组来传递数据行。我更倾向于使用JSON。您认为最好的格式是什么?在大多数情况下,一个复杂的结构可以作为几个相关的表在数据库中实现。这是一个模型解决方案,其中json可以作为数据交换的媒介。以json格式存储数据可能是一种简化的解决方案,通常效率较低,但设计更简单。@klin感谢您的评论,非常感谢。数据作为适当的数据类型(ints、varchar等)存储在规范化表中。我们只使用复合类型的数组作为函数参数。然而,在JSON中传递字符串似乎更容易。Postgres中的JSON需要一些练习,但确实很舒服。唯一的缺点是需要转换为原始类型,但这基本上是一件小事。