PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Паралелен unnest() и ред на сортиране в PostgreSQL

Да, това е характеристика на Postgres и паралелното разглобяване е гарантирано да бъдат в синхрон (стига всички масиви да имат еднакъв брой елементи).
Postgres 9.4 добавя чисто решение за паралелно unnest:

  • Отвържете паралелно множество масиви

Редът на получените редове обаче не е гарантиран. Всъщност с едно просто изявление като:

SELECT unnest(ARRAY[5,3,9]) AS id

полученият ред на редовете е "гарантиран", но Postgres не твърди нищо. Оптимизаторът на заявки е свободен да подрежда редове, както намери за добре, стига редът да не е изрично дефиниран. Това може да има странични ефекти при по-сложни заявки.

Ако втората заявка във вашия въпрос е това, което всъщност искате (добавете номер на индекс към невложени елементи на масив), има по-добър начин с 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 :

  • PostgreSQL unnest() с номер на елемент

След това можете да използвате:

SELECT * FROM unnest(ARRAY[5,3,9]) WITH ORDINALITY tbl(id, idx);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Slick 2.0 Общи CRUD операции

  2. Как мога да пусна всички таблици в PostgreSQL база данни?

  3. Записът, върнат от функцията, има конкатенирани колони

  4. DatabaseError:текущата транзакция е прекратена, командите се игнорират до края на блока на транзакцията?

  5. Как да намерите интервала между две дати в PostgreSQL