คำถามติดแท็ก 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 ไม่ถูกต้อง () พร้อมหมายเลของค์ประกอบ

1
อาร์เรย์แบบสอบถาม PostgreSQL JSON เทียบกับหลายค่า
ฉันต้องการเขียนแบบสอบถามกับjsonbประเภทใน Postgres ที่กำหนดอาร์เรย์รหัสลูกค้าจะพบกลุ่มที่เกี่ยวข้อง รับตารางตัวอย่างนี้: 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 …

1
วิธีรับวัตถุเฉพาะจากอาร์เรย์ jsonb ใน PostgreSQL
ฉันมีเขตข้อมูลที่เรียกว่า 'ผู้ใช้' ที่มีอาร์เรย์ json ที่มีลักษณะเช่นนี้: "user": [{ "_id" : "1", "count" : "4" }, { "_id" : "3", "count": "4"}] ตอนนี้ฉันต้องการแบบสอบถามเช่น: select count from tablename where id = "1" ฉันไม่สามารถรับฟิลด์เฉพาะcountจากอาร์เรย์ของวัตถุ json ใน PostgreSQL 9.4


2
เหตุใด array_agg () จึงช้ากว่าตัวสร้าง ARRAY ที่ไม่ใช่การรวม ()
ฉันเพิ่งตรวจสอบโค้ดเก่าที่เขียนขึ้นสำหรับPre-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% ยิ่งกว่านั้นการทำให้เรียบง่ายขึ้นโดยไม่มีคำสั่งซื้อแสดงความช้าเหมือนกัน # EXPLAIN ANALYZE SELECT ARRAY(SELECT x FROM foobar); …

1
PostgreSQL เตรียมการสืบค้นด้วยพารามิเตอร์ IN ()
ฉันพยายามจัดทำแบบสอบถามจาก PHP เช่น: pg_prepare($con, "prep", "select * from test where tid in ($1)"); จากนั้นเรียกใช้งานด้วย: $strpar = "3,4,6,8,10"; pg_execute($con, "prep", array($strpars)); ปัญหาคือฉันไม่สามารถผ่านชุดของค่าที่สร้างขึ้นตามที่เตรียมไว้คาดว่าจะมีพารามิเตอร์จำนวนคงที่ มีวิธีใดที่จะทำให้พารามิเตอร์เป็นแบบไดนามิกหรือไม่?

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 …

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 …

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 | +----+-------+------------+-------------------------------+ | …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.