Postgresql Postgres中的数组
在Postgres DB中,我有一个字段定义如下:Postgresql Postgres中的数组,postgresql,Postgresql,在Postgres DB中,我有一个字段定义如下: CREATE TABLE t ( id SERIAL PRIMARY KEY, field character varying(255)[] DEFAULT ARRAY[]::character varying[], ); ID LOWER 1 0 2 5 在那里,我存储的值如下: ID FIELD 1 {{lower,0},{greater,10}} 2 {{something_
CREATE TABLE t (
id SERIAL PRIMARY KEY,
field character varying(255)[] DEFAULT ARRAY[]::character varying[],
);
ID LOWER
1 0
2 5
在那里,我存储的值如下:
ID FIELD
1 {{lower,0},{greater,10}}
2 {{something_else,7},{lower,5}}
1-如何选择较低/较大的值?我想要这样的查询响应:
CREATE TABLE t (
id SERIAL PRIMARY KEY,
field character varying(255)[] DEFAULT ARRAY[]::character varying[],
);
ID LOWER
1 0
2 5
2-如何根据这些较低/较大的值进行过滤
谢谢 这样做很尴尬,但这就完成了。我使用PG 9.3,所以我不知道在以后的版本中是否有更好的方法来实现这一点
SELECT id, (SELECT field[ss][2] FROM generate_subscripts(field, 1) ss WHERE field[ss][1] = 'lower') AS lower
FROM t;
基本上,对于每个记录,生成下标作为主数组的索引,以访问子数组。对于每个,查找第一项为“lower”的数组。如果找到,则返回第二项的值。如果格式始终与您可以执行的格式完全相同,
选择id,字段[1][2]
。但是,您使用的是lower,5
,就像一个键/值对,但将其存储为两个完全不相关的值(出于所有目的)或相等的值。你应该重新考虑这个设计。为了存储键/值对,JSONB或HStUB是更好的选择,或者考虑适当地规范化你的数据模型。我已经编辑了这个问题。我不总是有相同的格式,我不能改变设计