Re: Convert pg_constraint.conkey array to same-order array of column names

Поиск
Список
Период
Сортировка
От Adrian Klaver
Тема Re: Convert pg_constraint.conkey array to same-order array of column names
Дата
Msg-id 4916ad6f-7677-d061-d447-d73176eaba4a@aklaver.com
обсуждение исходный текст
Ответ на Convert pg_constraint.conkey array to same-order array of column names  (Dominique Devienne <ddevienne@gmail.com>)
Ответы Re: Convert pg_constraint.conkey array to same-order array of column names  (Dominique Devienne <ddevienne@gmail.com>)
Список pgsql-general
On 3/23/23 04:12, Dominique Devienne wrote:
> We have a query returning 1 row per constraint column,
> which until recently we didn't realize wasn't preserving order of the 
> columns.
> 
> A colleague fixed that, with something like below:
> 
> SELECT ...
> FROM pg_catalog.pg_constraint cnstr
> ...
> CROSS JOIN LATERAL UNNEST(cnstr.conkey) WITH ORDINALITY AS cols(value, rank)
>   ORDER BY cols.rank
> 
> But I'm wondering about getting 1 row per constraint instead,
> and fetching an array of column names.
> 
> So is there a way to "convert" int2[] conkey array into a text[] of 
> those column names?

A before coffee solution:

WITH ck AS (
     SELECT
         conrelid,
         unnest(conkey) AS ky
     FROM
         pg_constraint
     WHERE
         conrelid = 'cell_per'::regclass
)
SELECT
     array_agg(attname)
FROM
     ck
JOIN
     pg_attribute
ON
     attnum = ck.ky AND ck.conrelid = pg_attribute.attrelid;

array_agg
-----------------------------
{category,line_id,category}


-- 
Adrian Klaver
adrian.klaver@aklaver.com




В списке pgsql-general по дате отправления:

Предыдущее
От: Magnus Hagander
Дата:
Сообщение: Re: Postgresql professional certification
Следующее
От: "Zwettler Markus (OIZ)"
Дата:
Сообщение: How to install vacuumlo on a client?