在复合类型数组上选择条件(postgresql)

时间:2010-04-01 10:54:54

标签: postgresql arrays composite

例如我输入了:

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

表:

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

如何选择包含带有“test”标签的记录的所有项目(不使用PL / pgSQL)?

1 个答案:

答案 0 :(得分:2)

为什么每个人都希望用阵列,hstores等射击自己?将数据规范化为标准SQL表。在编程时使用数组,hstore等高级功能。但这是一颗子弹......

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)

在一个数组中搜索文本,在另一个数组中的复合体中搜索......这只会令人难以置信。即使你确实弄明白了,任何在你试图维护你的代码之后来的人都会感到头疼。