|
|
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть запрос который соединяет в едино данные из множества разных схем: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И иногда случается так, что когда выполняется запрос, одна из схем еще не существует - ошибка типа ERROR: schema "schema2" does not exist, после чего приходится вручную закомментировать все что относится к этой схеме, что очень неудобно Могу ли я еще в WITH проверять есть ли схема или нет, и только если она существует выполнять запрос? Я нашел вот такую конструкцию: Код: plsql 1. Но как с ее помощью заставить ограничить выполнение подзапроса "t2" AS (...) так и не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 13:02:36 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
"не выбирать" не пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 13:12:20 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
Hawkmoon"не выбирать" не пробовали? Что именно Вы под этим подразумеваете? При выполнении запроса первым делом выполняются подзапросы в разделе WITH, он проходится по всем поочередно и если натыкается на несуществующую схему, то выдает ошибку. Как мне ему объяснить, что если "schema2" не существует, то пропусти этот подзапрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 13:22:19 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
KvasnikovHawkmoon"не выбирать" не пробовали? Что именно Вы под этим подразумеваете? При выполнении запроса первым делом выполняются подзапросы в разделе WITH, он проходится по всем поочередно и если натыкается на несуществующую схему, то выдает ошибку. Как мне ему объяснить, что если "schema2" не существует, то пропусти этот подзапрос? Никак (в запросе) Писать свою хранимку вместо WITH запроса как костыль если уж очень надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 13:55:37 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
Maxim BogukПисать свою хранимку Это сложно? Может уже есть какой-нибудь шаблончик? Честно говоря, даже не представляю по каким запросам в поиске искать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:08:47 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
Kvasnikov, искать не надо, нужно читать: http://www.postgresql.org/docs/9.3/static/server-programming.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 16:11:13 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
используйте наследование, таблицы потомки в разных схемах с одинаковым именем допустимы при этом, только что проверил. и конструировать самостоятельно UNION запрос не понадобится вовсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 17:03:51 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
KvasnikovHawkmoon"не выбирать" не пробовали? Что именно Вы под этим подразумеваете? При выполнении запроса первым делом выполняются подзапросы в разделе WITH, он проходится по всем поочередно и если натыкается на несуществующую схему, то выдает ошибку. Как мне ему объяснить, что если "schema2" не существует, то пропусти этот подзапрос? Была надежда (но не было времени проверить), что если не выбирать в секции union, то и к with-секции никогда обращения не будет. По крайней мере, в других местах такое видел. Ну нет, так нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 17:30:52 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, ты можешь в Код: sql 1. добавить условие Код: sql 1. Получится типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Я так делал, работает. И к моему аналогу t2 обращения не происходило. Использовал postgres 9.2, но наверняка и в других то же самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 11:36:00 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
Kvasnikov, извиняюсь, в предыдущем сообщении адресата перепутал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 12:03:35 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
FozzyBearты можешь добавить условие Код: sql 1. У меня 9.1. К сожалению этот вариант не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 12:24:33 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
FozzyBearHawkmoon, ты можешь в Код: sql 1. добавить условие Код: sql 1. Получится типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Я так делал, работает. И к моему аналогу t2 обращения не происходило. Использовал postgres 9.2, но наверняка и в других то же самое. не должно работать... но на этапе разбора запроса еще до выполнения оно выдаст ошибку что нет таблицы FROM "schema2".table ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 13:01:18 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, я не проверял персонально со схемой, но конструкция работает. Возможно наличие схемы движок проверит в любом случае, тогда да, развалится. Но что реальное обращение к t2 в этой конструкции произойдёт только если exists выполнен - факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 16:31:08 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
...и вычисление t2, естественно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 16:32:10 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
FozzyBearMaxim Boguk, я не проверял персонально со схемой, но конструкция работает. Возможно наличие схемы движок проверит в любом случае, тогда да, развалится. Но что реальное обращение к t2 в этой конструкции произойдёт только если exists выполнен - факт. так задача то была именно проверка схемы перед тем как в нее лезть... а это не возможно так как это делается очень сильно раньше чем исполнение запроса... про реальное обращение никто и не спорит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2014, 00:38:56 |
|
||
|
Проверка наличия схемы перед выполнением SELECT в подзапросе WITH
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukтак задача то была именно проверка схемы перед тем как в нее лезть... а это не возможно так как это делается очень сильно раньше чем исполнение запроса... про реальное обращение никто и не спорит... Для работы запроса при существующей/несуществующей схеме стоит запрос запихнуть в хранимую процедуру, которую и обновлять при создании схемы. И запрос всегда актуален, и на стороне клиента головной боли никакой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2014, 06:23:36 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38574132&tid=1998814]: |
0ms |
get settings: |
14ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
226ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 590ms |

| 0 / 0 |
