Questions tagged «array»

5
如何将json数组转换为postgres数组?
我有一列data,其中包含一个json大致像这样的文档: { "name": "foo", "tags": ["foo", "bar"] } 我想将嵌套tags数组转换为串联字符串(foo, bar)。array_to_string()从理论上讲,这很容易实现。但是,此功能不适用于json数组。所以我想知道如何将该json数组转换为Postgres array?

3
对数组成员的外键约束?
假设我有一个包含工作角色的表: CREATE TABLE roles ( "role" character varying(80) NOT NULL, CONSTRAINT "role" PRIMARY KEY (role) ); 假设我还有一个表,用户,并且每一行(一个特定的用户)可以具有任意数量的作业角色: CREATE TABLE users ( username character varying(12) NOT NULL, roles character varying(80)[] NOT NULL, CONSTRAINT username PRIMARY KEY (username) ); 我可能应该确保的每个成员都users.roles[]存在于role.role中。在我看来,我想要的是对每个成员的外键约束,users.roles[]例如,如果引用role.role。 对于postgres,这似乎是不可能的。我看错了方向吗?建议的“正确”处理方式是什么?

1
如何在未嵌套的数组中保留元素的原始顺序?
给定字符串: “我认为PostgreSQL很漂亮” 我想对在该字符串中找到的单个单词进行操作。本质上,我有一个单独的字符串,可以从中获取单词的详细信息,并希望在此字典中加入该字符串的未嵌套数组。 到目前为止,我有: select word, meaning, partofspeech from unnest(string_to_array('I think that PostgreSQL is nifty',' ')) as word from table t join dictionary d on t.word = d.wordname; 这样就完成了我希望做的基本工作,但是并没有保留原始的单词顺序。 相关问题: 带有元素编号的PostgreSQL unnest()

1
PostgreSQL JSON查询数组针对多个值
我想针对jsonbPostgres 中的类型编写查询,因为给定的客户ID数组将找到对应的组。 给定此示例表: CREATE TABLE grp(d JSONB NOT NULL); INSERT INTO grp VALUES ('{"name":"First","arr":["foo"], "customers":[{"id":"1", "name":"one"},{"id":"2", "name":"two"}]}') , ('{"name":"Second","arr":["foo","bar"], "customers":[{"id":"3", "name":"three"},{"id":"4", "name":"four"}]}') , ('{"name":"Third","arr":["bar","baz"], "customers":[{"id":"5", "name":"five"},{"id":"6", "name":"seven"}]}'); 我发现了类似的问题(针对多个值的PostgreSql JSONB SELECT),并使用此查询设法在简单数组上实现了我想要的功能: SELECT d FROM grp WHERE d->'arr' ?| ARRAY['foo', 'bar']; 但是,当数组包含JSON 对象时,我无法使其工作: SELECT d FROM grp WHERE d->'customers' ?| ARRAY['{"id":"1"}', '{"id":"5"}']; …



2
为什么array_agg()比非聚合ARRAY()构造函数慢?
我只是在回顾一些为8.4之前的PostgreSQL编写的旧代码,我发现确实很不错。我记得以前有一个自定义函数来执行某些操作,但我忘记了它的外观array_agg()。为了进行回顾,现代聚合是这样写的。 SELECT array_agg(x ORDER BY x DESC) FROM foobar; 但是,从前,它是这样写的, SELECT ARRAY(SELECT x FROM foobar ORDER BY x DESC); 因此,我尝试了一些测试数据。 CREATE TEMP TABLE foobar AS SELECT * FROM generate_series(1,1e7) AS t(x); 结果令人惊讶。#OldSchoolCool方法大大提高了速度:加快了25%。而且,在不使用ORDER的情况下对其进行简化显示出相同的慢度。 # EXPLAIN ANALYZE SELECT ARRAY(SELECT x FROM foobar); QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- Result (cost=104425.28..104425.29 rows=1 width=0) (actual time=1665.948..1665.949 rows=1 …

1
带有IN()参数的PostgreSQL PREPARE查询
我正在尝试从PHP准备查询,例如: pg_prepare($con, "prep", "select * from test where tid in ($1)"); 然后执行以下命令: $strpar = "3,4,6,8,10"; pg_execute($con, "prep", array($strpars)); 问题是我无法传递由于prepare需要固定数量的参数而构建的一系列值。有什么方法可以使参数动态化?

2
高效合并(删除重复项)数组
我有两个表,left2和right2。两个表都将很大(1-10M行)。 CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER); ALTER TABLE left2 ADD PRIMARY KEY (id,t1); CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] ); ALTER TABLE right2 ADD PRIMARY KEY(t1,d); 我将执行这种类型的查询: SELECT l.d + r.d, UNIQ(SORT((array_agg_mult(r.arr))) FROM left2 l, right2 r WHERE l.t1 = r.t1 GROUP BY l.d …

2
自定义涉及数组的jsonb键排序顺序
我在PostgreSQL中有一张表,里面有一些数据: create table t2 ( key jsonb, value jsonb ); INSERT INTO t2(key, value) VALUES ('1', '"test 1"') ,('2', '"test 2"') ,('3', '"test 3"') ,('[]', '"test 4"') ,('[1]', '"test 5"') ,('[2]', '"test 6"') ,('[3]', '"test 7"') ,('[1, 2]', '"test 8"') ,('[1, 2, 3]', '"test 9"') ,('[1, 3]', '"test 10"') ,('[1,2,4]', …

2
查找整数序列包含给定子序列的行
问题 注意:我指的是数学序列,而不是PostgreSQL的序列机制。 我有一张表,代表整数序列。定义是: CREATE TABLE sequences ( id serial NOT NULL, title character varying(255) NOT NULL, date date NOT NULL, sequence integer[] NOT NULL, CONSTRAINT "PRIM_KEY_SEQUENCES" PRIMARY KEY (id) ); 我的目标是使用给定的子序列查找行。也就是说,其中sequence字段是包含给定子序列的序列的行(在我的情况下,该序列是有序的)。 例 假设该表包含以下数据: +----+-------+------------+-------------------------------+ | id | title | date | sequence | +----+-------+------------+-------------------------------+ | 1 | BG703 | 2004-12-24 …

2
数组integer []:如何获取表中所有不同的值并对其进行计数?
我对SQL(PostgreSQL)不太满意。这是我想做的: 我有一张桌子,字段: id SERIAL inet INET ports integer[] id | inet | ports ----+------------+------------ 2 | 1.2.2.1 | {80} 1 | 1.2.3.4 | {80,12} ... 我怎么能够 获取此表中所有使用的“端口”值:80、12 计算特定端口上有多少个Inet地址: 像这样: port | count --------+------------ 12 | 1 80 | 2 ... 如果有人在寻找它的Django版本: class Unnest(Func): function = 'UNNEST' Model.objects \ .annotate(port=Unnest('ports', distinct=True)) …

3
如何取消嵌套和GROUP BY元素的JSON数组?
给定该band表,其中包含json一个数组的列: id | people ---+------------- 1 | ['John', 'Thomas'] 2 | ['John', 'James'] 3 | ['James', 'George'] 如何列出每个名字所属的乐队数量? 所需的输出: name | count -------+------------ John | 2 James | 2 Thomas | 1 George | 1

7
如何在定界符之后生成所有尾随子字符串?
给定一个可能包含定界符的多个实例的字符串,我想生成该字符之后的所有子字符串。 例如,给定一个类似'a.b.c.d.e'(或array {a,b,c,d,e})的字符串,我想生成一个类似以下的数组: {a.b.c.d.e, b.c.d.e, c.d.e, d.e, e} 预期的用法是触发填充一列,以便每当写入另一列时都q.x.t.com可以更轻松地查询域名部分(即查找所有要查询的内容t.com)。 解决这个问题似乎很尴尬(也许很好),但是现在我很好奇如何用(Postgres')SQL编写这样的函数。 这些是电子邮件域名,因此很难说出元素的最大数量是多少,但是可以肯定的是绝大多数元素都小于5。

1
如何从PostgreSQL的JSON []数组中删除已知元素?
我面临有关在PostgreSQL中使用JSON数据类型的问题。我试图实现在数据库中存储非规范化的Java模型。该模型具有复杂对象列表。因此,我决定在本地PostgreSQL数组中将其建模为JSON。 这是我的表创建语句的摘要: CREATE TABLE test.persons ( id UUID, firstName TEXT, lastName TEXT, communicationData JSON[], CONSTRAINT pk_person PRIMARY KEY (id) ); 如您所见,这是一个具有JSON中通讯数据对象列表的人。这些对象之一可能看起来像这样: {"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"} 我可以使用PostgreSQL的array_append轻松地将这样的JSON对象附加到数组。但是,我无法从数组中删除已知值。考虑一下这个SQL语句: UPDATE test.persons SET communicationData = array_remove( communicationData, '{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}'::JSON ) WHERE id = 'f671eb6a-d603-11e3-bf6f-07ba007d953d'; 失败ERROR: could not identify …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.