|
|
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
Скажите пожалуйста, есть ли гарантия соответствия в результирующей выборке между одними и теми же индексами различных массив при выполнении функции unnest, например есть Код: sql 1. В результате должны получить набор строк из двух полей, где в одной строке должен быть первый элемент первого массива и первый элемент второго массива, в следующей строке 2 элемент 1 массива и 2 элемент 2 массива и т.д. Массивы всегда имеют одинаковую размерность. Версия postgresql 8.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 12:17:54 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
big-trotСкажите пожалуйста, есть ли гарантия соответствия в результирующей выборке между одними и теми же индексами различных массив при выполнении функции unnest, например есть Код: sql 1. В результате должны получить набор строк из двух полей, где в одной строке должен быть первый элемент первого массива и первый элемент второго массива, в следующей строке 2 элемент 1 массива и 2 элемент 2 массива и т.д. Массивы всегда имеют одинаковую размерность. Версия postgresql 8.4 практически именно на версии 8.4 есть теоретически же - поведение в общем случае неспецифицированно... а зачем вам такоге надо? сделайте себе Код: plaintext 1. 2. 3. 4. 5. 6. и наслаждайтесь гарантированный поведением... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 12:31:40 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk <> практически именно на версии 8.4 есть <> а это разве не декарт ? или в 8.4 у них ещё в головках не прояcнело, что это скрытый lateral ? 2TS в 8.4 row_number() отсутствует (обычно через него проще). поэтому через generate_series(1,GREATEST(array_length(array1,1),array_length(array2,1)) i примерно так (не тестил): Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 12:58:13 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
big-trot, на случай будущего апгрейда можно извернуться вот так: Код: plsql 1. 2. 3. 4. 5. 6. 7. или глянуть сюда: http://stackoverflow.com/questions/8760419/postgresql-unnest-with-element-number ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 13:05:04 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
йокарный бабай<> а это разве не декарт ? или в 8.4 у них ещё в головках не прояcнело, что это скрытый lateral ? <> таки не декарт по крайней мере до 9.1. включительно будем знать мелкие , никчёмные люди эти ..., слюшай ну просто законченные, неприкрытые олбаобы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 13:15:02 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
бгг. там целая теория чисел и сравнимости по модулю: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. бугага, просто уссацца мелкие , никчёмные люди эти ..., слюшай ну просто законченные, неприкрытые, сертифицированные оп.здолы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 13:24:56 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
йокарный бабайбгг. там целая теория чисел и сравнимости по модулю: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. бугага, просто уссацца мелкие , никчёмные люди эти ..., слюшай ну просто законченные, неприкрытые, сертифицированные оп.здолы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 13:30:59 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
йокарный бабай, и вообще, надо запомнить эту , кхм, "фичу" хорошенько, и никогда не вставлять более одной set-returning в select лист, если от него хочется честного квази-lateral с декартом Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 13:38:56 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk а зачем вам такоге надо? В таблице pg_constraint есть два поля conkey и confkey. Между этими массивами установлена однозначная связь, т.е. первый элемент одного массива соответствует первому элементу другого массива. Отсюда и возникла эта задача. Спасибо всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 14:51:28 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
йокарный бабаййокарный бабай, и вообще, надо запомнить эту , кхм, "фичу" хорошенько, и никогда не вставлять более одной set-returning в select лист, если от него хочется честного квази-lateral с декартом Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. фича известна, описана в документации, и отмечена что вообще поведение неспецифицированно и что так делать не надо. именно по этому я написал что в общем случае поведение неспецифицированно и с какой то из версий несколько SRF в result list будет просто запрещено использовать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 17:39:49 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, а, прстите за нескромный, афтар у сей фичи имеется ? чей это кг/ам ? страна должна знать своих героев или и тут во всём индусы вино ваты ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 20:08:53 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukфича известна, описана в документации, и отмечена что вообще поведение неспецифицированно и что так делать не надо. А ткните, пожалуйста, в документацию линком. Я не смог найти в текущей версии описания этой фичи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 20:10:51 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
vyegorovMaxim Bogukфича известна, описана в документации, и отмечена что вообще поведение неспецифицированно и что так делать не надо. А ткните, пожалуйста, в документацию линком. Я не смог найти в текущей версии описания этой фичи.я вот знаю, когда это (для равных array-ев) практично. но запороть из-за одиночной практичности целую ветку напрашивающегося синтакса [однопольных lateral] -- это не по хозяйски. за такое вешать надо на воротах. Можно, конечно, ввести дополнительные модификаторы (типа ~CORRELATED~) для отличия нормального поведения (декарт) от почленно--коррелированного-по-модулю-наименьшего-сета [причем даже и для некратных сетов можно что-то эдакое понапридумать, отличное от декарта, и полезное в хозяйстве]. Это будет типа ""ара-кал" вей". По 100 дополнительных слов в случайных местах вместо синтаксической стройности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 20:48:50 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
йокарный бабайMaxim Boguk, а, прстите за нескромный, афтар у сей фичи имеется ? чей это кг/ам ? страна должна знать своих героев или и тут во всём индусы вино ваты ? эта баго-фича была унаследована в каком то виде PostgreSQL от BerkelyDB лет 30 назад (по слухам). С тех пор и мучаемся :). Вот вам например обсуждение 6 летней давности: http://www.postgresql.org/message-id/flat/e431ff4c0803190503m49eeef76pb91a692009a30331@mail.gmail.com]http://www.postgresql.org/message-id/flat/e431ff4c0803190503m49eeef76pb91a692009a30331@mail.gmail.com (ключевое там последнее письмо). Эту тему я в рассылках вижу 1-2 раза в год вылезающую уже лет 10 минимум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 04:52:42 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Доброго времени суток. Что посоветуете, если мы активно используем массивы с одинаковой размерностью, рассчитывая, что unnest() вернет результат поэлементно? PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 14:14:33 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
Gold_Maxim Boguk, Доброго времени суток. Что посоветуете, если мы активно используем массивы с одинаковой размерностью, рассчитывая, что unnest() вернет результат поэлементно? PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit Спасибо. до версий 9.4 включительно - можно считать что гарантированно... на будущее... hm... я бы что то вроде вышеупомянутого Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. использовал бы. Но вообще надо конкретный запрос смотреть конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 14:35:11 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Или (что после 5 минут раздумий мне понравилось больше - использовать row_number()): Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 14:41:58 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
Maxim BogukMaxim Boguk, Или (что после 5 минут раздумий мне понравилось больше - использовать row_number()): Код: plsql 1. 2. 3. вообще все зависит от размера массивов... для длинных (100 и больше) первый вариант быстрее для коротких - 10 и меньше второй ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 14:43:43 |
|
||
|
Функция UNNEST
|
|||
|---|---|---|---|
|
#18+
Начиная с 9.4 для явной нумерации строк можно делать так: Код: sql 1. Также добавлена конструкция `ROWS FROM ()`, которая получает набор функций на вход, и выдает (построчно) значения первого ряда, второго ряда и т.д. (т.е. первые результаты в выводе функций формируют первую строку результата), выводя NULL для недостающих элементов. Код: sql 1. В случае же unnest(), то она была перегружена версией принимающей N массивов и ведущей себя также как и `ROWS FROM()` конструкция. Такую функцию можно использовать только во FROM-списке. Код: sql 1. 2. Описано тут (вниз до function_name ), чуть подробнее у depesz'а и у Michael Paquier'а . Скорость я не смотрел :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 16:09:32 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38756190&tid=1998478]: |
0ms |
get settings: |
6ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
192ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 523ms |

| 0 / 0 |
