代码之家  ›  专栏  ›  技术社区  ›  valodzka

组合类型数组上的带条件选择(PostgreSQL)

  •  3
  • valodzka  · 技术社区  · 14 年前

    例如,我有类型:

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

    表:

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

    如何选择带有标记“test”(不使用pl/pgsql)的记录的所有项?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Scott Bailey    14 年前

    为什么每个人都想用阵列、高速摄影机等射击自己的脚?将数据规范化为标准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)
    

    在一个数组中搜索文本,在另一个数组的组合中搜索文本…好吧,这让我很困惑。即使你真的想出来了,任何在你试图维护你的代码之后来的人都会挠头。