タグ付けされた質問 「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[]roles.role に存在することを確認する必要があります。私が望むのは、users.roles[]ifがroles.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クエリ配列
jsonb顧客IDの配列に対応するグループが見つかるという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 FROM grp WHERE d->'customers' ?| ARRAY['{"id":"1"}', '{"id":"5"}']; クエリに期待することは次のとおりです。 …


1
PostgreSQLのjsonb配列から特定のオブジェクトを取得するにはどうすればよいですか?
おおよそ次のようなjson配列を保持する「user」というフィールドがあります。 "user": [{ "_id" : "1", "count" : "4" }, { "_id" : "3", "count": "4"}] 今私は次のようなクエリが必要です: select count from tablename where id = "1" countPostgreSQL 9.4では、jsonオブジェクトの配列から特定のフィールドを取得できません。

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
配列の効率的なマージ(重複の削除)
テーブルが2つleft2ありright2ます。両方のテーブルは大きくなります(1〜1000万行)。 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)) …


7
デリミタに続くすべての後続部分文字列を生成するにはどうすればよいですか?
区切り文字の複数のインスタンスを含む可能性がある文字列が与えられた場合、その文字の後に始まるすべての部分文字列を生成したいと思います。 たとえば、次のような文字列'a.b.c.d.e'(または配列{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モデルをDBに格納しようとしています。モデルは複雑なオブジェクトのリストを備えています。そのため、これらをネイティブのPostgreSQL配列でJSONとしてモデル化することにしました。 これは私のテーブル作成ステートメントの抜粋です: CREATE TABLE test.persons ( id UUID, firstName TEXT, lastName TEXT, communicationData JSON[], CONSTRAINT pk_person PRIMARY KEY (id) ); ご覧のとおり、それはJSONで通信データオブジェクトのリストを備えた人物です。そのようなオブジェクトの1つは次のようになります。 {"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 …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.