Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Всем привет. Пишу импорт данных из MS SQL в PostgreSQL через TDS FDW (версия FDW - 2.0.0). Версия PostgreSQL - 9.4 , OS - freebsd. Суть проблемы : в цикле FOR IN LOOP .. END LOOP вызывается некая функция PL/pgSQL, в которой есть SELECT к внешней таблице. Результат работы цикла - сотни строк, поэтому функция должна быть вызвана столько же раз. На 6 -ой итерации - в момент выполнения запроса к внешней таблице - происходит какая-то необъяснимая подстановка/замещение значение переменной на NULL в условии блока where запроса к внешней таблице. Кто - нибудь сталкивался с подобным? Текст основной функции, где происходит вызов : Код: plsql 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. Текст вызываемой функции в цикле : Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Передаваемые ID - все не null (так как являются PK). Именно на 6 ой итерации происходит неявная подстановка pnmatch_id на null в запросе Код: sql 1. 2. 3. 4. 5. Заранее, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 16:28 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Cristiano_Rivaldo, авторSELECT t.*, fm.id id_c авторLEFT JOIN ****** on (t.ID = fm.ID) авторPERFORM dbs_match_process(CUR.ID); Которое из двух полей id будет доступно в строке под псевдонимом id? Видимо, второе. Пока left join строки находил, это не имело значения, как не нашёл - подставил NULL. Используйте алиасы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 16:45 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
ой, мне запятая почудилась после fm.id. А сообщение грохнуть нельзя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 16:47 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Именно на 6 итерации. Неважно какие параметры указаны в (pnseason_id integer, pntournament_id integer). Скрин запроса на стороне MS SQL прилагается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 16:58 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Для начала попробуйте вот так вот (и посмотрите что в raise warning идет, null или нормальное значение). Если идет не null а в FDW приезжает null - похоже на глюк в FDW Если все работает как надо - то аккуратнее с запросами и алиасами (и вообще с использованием * нотации в запросах не по делу). Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 17:28 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Не помогло... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 17:54 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Cristiano_Rivaldo, А зачем вы альфа версию TDW используете? Попробуйте стабильную 1.0.8 -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2016, 18:37 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Потому что именно в ней реализован поиск записей по индексу. Т.е. при обращении закачивается не вся таблица, а только те записи, которые указаны в блоке where. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 09:12 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Причем такая же ошибка выходит даже если написать через with : Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И почему именно на 6 - ой итерации ? Что за магическое число 6 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 10:07 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Cristiano_RivaldoПричем такая же ошибка выходит даже если написать через with : Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И почему именно на 6 - ой итерации ? Что за магическое число 6 ? Есть у меня теория почему именно на 6той... а попробуйте переделать public.dbs_match_process как Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 17:10 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Не помогло. Заметил что если даже обрабатывать порциями по 5 и делать все в одной сессии - то на втором запуске тоже вылетает ошибка. Как буд-то это ограничение на всю сессию... Но если открыть новое окно sql запросов (новая сессия) - то все норм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:03 |
|
||
|
Обращение к внешней таблице в цикле
|
|||
|---|---|---|---|
|
#18+
Cristiano_RivaldoMaxim Boguk, Не помогло. Заметил что если даже обрабатывать порциями по 5 и делать все в одной сессии - то на втором запуске тоже вылетает ошибка. Как буд-то это ограничение на всю сессию... Но если открыть новое окно sql запросов (новая сессия) - то все норм. Очевидная бага в FDW. Напишите автору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 05:10 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39347024&tid=1996863]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 118ms |

| 0 / 0 |
