Как хранить двойные кавычки в массиве Postgres составного типа? - PullRequest
0 голосов
/ 20 декабря 2018

Как передать двойные кавычки в массив составного типа?

Когда я избегаю двойных кавычек с косой чертой \ ", кажется, что postgres удаляет его.

На моем сервере установлено значение standard_conforming_strings.

Использование этого составного типа:

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)

Любая помощь приветствуется, спасибо!

1 Ответ

0 голосов
/ 20 декабря 2018

Используйте три экранированных двойных кавычки:

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 - это путь через муку,трата времени и энергии.В мире баз данных есть более естественные, более эффективные и гораздо более простые альтернативы.Я призываю вас попытаться найти их.

...