Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres中的数组_Postgresql - Fatal编程技术网

Postgresql Postgres中的数组

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_

在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_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是更好的选择,或者考虑适当地规范化你的数据模型。我已经编辑了这个问题。我不总是有相同的格式,我不能改变设计