はい、それはPostgresの機能であり、並列ネスト解除は保証されています。 同期する(すべての配列に同じ数の要素がある限り)。
Postgres 9.4は、並列unestのクリーンなソリューションを追加します:
- 複数のアレイを並列にネスト解除する
ただし、結果の行の順序は保証されません。実際、次のような単純なステートメントで:
SELECT unnest(ARRAY[5,3,9]) AS id
結果として得られる行の順序は「保証」されますが、Postgresは何もアサートしません。クエリオプティマイザは、順序が明示的に定義されていない限り、適切と思われる行を自由に順序付けできます。これは、より複雑なクエリで副作用を引き起こす可能性があります。
質問の2番目のクエリが実際に必要なものである場合(ネストされていない配列要素にインデックス番号を追加する)、 generate_subscripts()を使用するより良い方法があります。 :
SELECT unnest(ARRAY[5,3,9]) AS id
, generate_subscripts(ARRAY[5,3,9], 1) AS idx
ORDER BY idx;
この関連する回答の詳細:
- postgreSQLを使用して配列の内部インデックスにアクセスするにはどうすればよいですか?
WITH ORDINALITY
に興味があります Postgresで9.4 :
- 要素番号付きのPostgreSQLunnest()
次に、次を使用できます:
SELECT * FROM unnest(ARRAY[5,3,9]) WITH ORDINALITY tbl(id, idx);