выберите с условиями на массиве составных типов (postgresql) - PullRequest
3 голосов
/ 01 апреля 2010

Например, у меня есть тип:

CREATE TYPE record AS ( name text, description text, tags text[])

И таблица:

CREATE TABLE items ( id serial, records record[] )

Как выбрать все элементы с записями с тегами 'test' (без использования PL / pgSQL)?

1 Ответ

2 голосов
/ 01 апреля 2010

Почему каждый хочет выстрелить себе в ногу с массивами, магазинами и т. Д.? Нормализуйте ваши данные в стандартные таблицы SQL. И используйте расширенные функции, такие как массивы, hstores, когда вы программируете. Но вот пуля ...

Postgres не понравится использование зарезервированного слова в качестве типа.

CREATE TYPE rec AS (name text, description text, tags text[]);
CREATE TABLE items (id int, wreck rec);
INSERT INTO items(1, row('foo','foo description', '{test,testing,tested}')::rec);

SELECT * 
FROM items
WHERE 'test' = ANY ((wreck).tags)

И поиск текста в массиве, в композите в другом массиве ... это просто поражает воображение. И даже если бы вы поняли это, любой, кто придет после того, как вы попытаетесь сохранить свой код, остался бы чесать голову.

...