|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
есть запрос, которые отбирает имена таблиц Код: sql 1.
И есть запрос, которые меняет тип колонки одной таблицы Код: sql 1.
Как поменять тип колонки "description" во всех таблицах, которые вернул первый запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2013, 09:14 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
Mike359, анонимный блок, + динамический скл. внутри цикла по выборке из первого запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2013, 10:07 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
qwwq, Мне подсказали такой вариант: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В PostgreSQL 9.1 все работает, но в нужная мне база 8.4, и там это выражение вызывает ошибку ОШИБКА: ошибка синтаксиса (примерное положение: "$1") LINE 1: ALTER TABLE $1 ALTER COLUMN "description" TYPE text Почему так? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2013, 10:23 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
Mike359, потому что в 8.4 нельзя использовать имя таблицы как параметр, вызывайте ALTER через EXECUTE. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2013, 11:03 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
Спасибо. Итоговый вариант для будущих поколений: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2013, 11:20 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
Подскажите, пожалуйста, что я делаю не так? PostgreSQL версия 9.5 Хочу всем таблицам базы изменить схему. Перепробовал 4 варианта. Первый подсмотрен тут ругается на Alter. Все остальные уверяют меня, что таблица не существует. Код: 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. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 11:06 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
Alexeyd, опуская странный выбор колумнсов, вместо теблсов, (да и сам стиль говнокодинга, у меня всё работает. во всех вариантах. думаю, вы пытаетесь сделать что--то лишнее , например эту гадость выполнять конкурентно. пишите ошибки полнее. [SRC sqlBEGIN; DO $$ DECLARE tname regclass; --DECLARE tname text; declare sql text; begin while exists(select table_name from information_schema.columns where table_schema='public') loop select table_name into tname from information_schema.columns where table_schema='public' FETCH FIRST 1 ROWS ONLY; -- вариант 1 --EXECUTE format($e$ ALTER TABLE %I SET SCHEMA rent $e$, tname); -- вариант 2 --sql := 'alter TABLE '||tname||' set SCHEMA rent'; EXECUTE sql; -- вариант 3 --sql := 'alter TABLE "'||tname||'" set SCHEMA rent';EXECUTE sql; -- вариант 4 sql := 'alter TABLE %I set SCHEMA rent';EXECUTE format(sql,tname); end LOOP; end $$; select table_name from information_schema.columns where table_schema='rent'; ---смотрим список табличек rollback; [/SRC] ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 11:52 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
qwwq, Ошибка для варианта 1 ОШИБКА: ошибка синтаксиса (примерное положение: "ALTER") LINE 14: EXECUTE format($$ ALTER TABLE %I SET SCHEMA rent $$, tname... Ошибка для вариантов 2-4 ОШИБКА: отношение "limitobject" не существует CONTEXT: функция PL/pgSQL inline_code_block, строка 9, оператор SQL-оператор qwwqопуская странный выбор колумнсов, вместо теблсов Это то, что первое нагуглилось, после опубликования вопроса, догадался, что можно использовать information_schema.tables. Правда результат от этого не изменился. Может какие-то дополнительные настройки самого ПостГри требуются? У меня всё по-дефолту после установки. Это первый опыт работы с Postgre(откровенно говоря, после МС СКЛ он мне очень не нравится), потому прошу также подсказать, что не так со стилем кода? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 12:49 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
Упс, похоже проблема в таблице limitobject. Стоило перенести таблицу вручную, код заработал. Экспериментальным методом научного тыка, выяснил, что к ней надо обращаться через полный путь - схема.limitobject иначе - ни в какую, даже после ее переименования "abc". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 13:11 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
Alexeyd, 1 вы невнимательны. /*перечитайте мой предыдущий спойлер.*/ 2. как всякий невнимательный человек вы где--то налажали, и в вариантах 2-4 дважды пытаетесь передвинуть одну и ту же табличку. получая ожидаемую ошибку.. вопрос -- где . или забываете квотить имена в смешанных регистрах и с пробелами я вашего исполняемого кода не вижу, конкурентных транзакций, возможно обогнавших текущую -- тоже. т.ч. попытайтесь проанализировать свои действия во всем их объеме сами попробуйте это и только это Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 13:17 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
qwwq, подождите, в скрипте все варианты, кроме одного комментились. Исполнялся только чистый эксперимент с одним вариантом. Никаких транзакций и прочего - только 1 приведённый мной скрипт, который выполнялся в редакторе запросов и всё - база только проектируется. Таблиц с пробелами, подчёркиваниями и прочим не имеется - все названия в одно слово. Разве язык pl/pgsql регистрозависимый? Зачем квотить имена, написанные в смешанном регистре? Мой вариант с вашими поправками: вместо $$ написать $e$ сработал. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Прошу еще пояснить, почему если я оставляю запрос таким, каким он был изначально, включая комментарии, появляется ругань? ОШИБКА: ошибка синтаксиса (примерное положение: "ALTER") LINE 14: EXECUTE format($$ ALTER TABLE %I SET SCHEMA rent $$, tname... Ведь эта строчка закомменчена. При этом, если перенести её за пределы блока DO (после end $$), ошибка исчезает. Код: 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. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 13:56 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
AlexeydПрошу еще пояснить, почему если я оставляю запрос таким, каким он был изначально, включая комментарии, появляется ругань? Потому что RTFM . Вы используете один и тот же символ ($$) для квотирования тела функции и строки внутри тела функции. Поэтому интерпретатор полагает, что функция заканчивается именно в этом месте, а дальше идет какая-то ересь. О чем и сообщает обычным английским языком. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 14:01 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
ursidoВы используете один и тот же символ ($$) для квотирования тела функции и строки внутри тела функции. Поэтому интерпретатор полагает, что функция заканчивается именно в этом месте, а дальше идет какая-то ересь. Жаль, что его не научили а) выполнять операции без лишнего квотирования; б) игнорировать комментарии. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 14:26 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
Alexeydursido<> Жаль, что его не научили а) выполнять операции без лишнего квотирования; мальчик, ты дебил ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 14:37 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
qwwqмальчик, ты дебил Очень информативно. За это огромное вам спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 14:46 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
Alexeydqwwqмальчик, ты дебил Очень информативно. За это огромное вам спасибо. альтернативно одаренным даю наводку: помедитируйте об эскепинге спецсимволов в строковых литералах в коде самое простое Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 15:03 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
qwwqпомедитируйте об эскепинге спецсимволов в строковых литералах в коде самое простое Код: sql 1.
Если этот литерал с одинарной кавычкой будет закомменчен, ни один компилятор не придерётся, кроме Постгришного. МС спокойно относится к наличию стапятисот незакрытых кавычек в комментариях. Код: sql 1. 2. 3. 4. 5. 6.
А вообще, я имел в виду, что дурацкие доллары, блоки Do - всё это лишнее, у МС в этом плане намного удачнее реализация. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 15:18 |
|
Запрос с подстановкой
|
|||
---|---|---|---|
#18+
AlexeydЕсли этот литерал с одинарной кавычкой будет закомменчен, ни один компилятор не придерётся, кроме Постгришного. МС спокойно относится к наличию стапятисот незакрытых кавычек в комментариях. гм: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
а вы ещё более альтернативны, чем я полагал как любили говорить в раньшие года -- днище или вы и там снизу постучите ? квотирование литералов не кавычками , а дабл-бакс-тагами $tag$ -- альтернативный способ, и вы можете его даже отключить, а не только не пользоваться. продолжайте юзать кавычки и их удваивать на каждом уровне - если вам от этого легче ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 15:54 |
|
|
start [/forum/topic.php?fid=53&fpage=73&tid=1996509]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 324ms |
total: | 475ms |
0 / 0 |