3

例如我有类型:

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

和表:

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

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

4

1 回答 1

3

为什么每个人都想用数组、hstore 等来踢自己的脚?将您的数据规范化为标准 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)

并在一个数组中搜索文本,在另一个数组中的复合中搜索......好吧,这简直令人难以置信。即使你确实弄明白了,任何追随你试图维护你的代码的人都会摸不着头脑。

于 2010-04-01T17:52:42.047 回答