172 похожих чатов

Добрый день, а может кто-нибудь подсказать, где почитать про различия

в параметре LANGUAGE при создании функции - напишу я там sql или plpgsql? Пытаюсь перевести хранимку с MS SQL на постгрес, а что-то то одна ошибка, то другая, и какие-то неоднозначные...

31 ответов

7 просмотров

там указывается на каком языке будет написана хранимая функция

Gennady-Goncharov Автор вопроса
central hardware
там указывается на каком языке будет написана хран...

Это я понял, спасибо)) Просто например мне нужно внутри этой функции объявить переменные и создать временные таблицы. И я не совсем понимаю, что и как я могу делать, а что нет. Например, в блоке begin-end я вроде бы не могу декларировать переменные и темповые таблицы, а где тогда их объявлять, если я указываю language sql?

Gennady Goncharov
Это я понял, спасибо)) Просто например мне нужно в...

если вы указали plpgsql то можете делать что позволяет его синртаксис, если sql То только sql

Gennady-Goncharov Автор вопроса
central hardware
если вы указали plpgsql то можете делать что позво...

но если я указываю sql и тупо копирую хранимку из MS SQL, то у меня ничего не работает) Получается, этот sql какой-то определенный, не такой как MS...

Gennady Goncharov
но если я указываю sql и тупо копирую хранимку из ...

это так не работает, нужно их переносить руками, там довольно много моментов которые заработают конечно но поведение будет отличаться из-за чего все сломается

Gennady-Goncharov Автор вопроса
central hardware
это так не работает, нужно их переносить руками, т...

а есть какой-нить туториал по переносу с перечислением всех таких важных моментов?) Не первый же я столкнулся с этой задачей по переносу...

Gennady Goncharov
но если я указываю sql и тупо копирую хранимку из ...

SQL вообще стандаризован очень херово (как в смысле. что то, что написано в стандарте -- херовое, так и в том, что обычно разные SQL сильно отличаются друг от друга и от стандарта). Кроме того, SQL как язык хранимых процэдур заметно отличается от просто клиент/серверного варианта SQL (при этом как в Postgres, так и в MS).

Gennady Goncharov
а есть какой-нить туториал по переносу с перечисле...

Рабочего -- нет, только хорошо изучить оба языка. Потом можно идти по чеклистам и бест практиз -- но без изучения обоих диалектов SQL это достаточно безсмысленно.

Gennady Goncharov
а есть какой-нить туториал по переносу с перечисле...

https://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#Microsoft_SQL_Server

Gennady-Goncharov Автор вопроса
Yaroslav Schekin
https://wiki.postgresql.org/wiki/Converting_from_o...

большое спасибо!) Половина ссылок из этого списка уже фиолетовые, но я забыл, что вообще этот список находил, надо еще раз все перечитать)

Gennady Goncharov
но если я указываю sql и тупо копирую хранимку из ...

в SQL Server язык написания хранимок - T-SQL, а не чистый SQL, именно поэтому вы можете в нем использовать переменные, циклы и тд. В Postgres ближайшим аналогом T-SQL является plpgsql. Чистый SQL не поддерживает императивных конструкций. Процедуры/функции/вьюхи, которые не используют императивный мусор, перенесутся простой копипастой с минимальными изменениями, а все императивное нужно будет портировать на plpgsql, иногда не совсем тривиально. Я недавно занимался ровно таким проектом, пишите если будут конкретные вопросы

Gennady Goncharov
👍Благодарю!

вот этот материал оказался полезен для того чтоб начать https://severalnines.com/database-blog/migrating-mssql-postgresql-what-you-should-know

Gennady Goncharov
👍Благодарю!

Да еще стоит отметит что бездумный порт T-SQL в plpgsql плохой вариант, у меня количество процедур уменьшилось на треть при том что функциональность кода существенно выросла при переходе с MS SQL на PostgreSQL.

Дмитрий Иванов
Да еще стоит отметит что бездумный порт T-SQL в pl...

Ради интереса, т.к. сам подобным занимался - а зачем переезжали? Просто в моём случае, что-то стало лучше, а что-то хуже.

Andrey Lizenko
Ради интереса, т.к. сам подобным занимался - а зач...

Переезжали так как было желание перевести движок на open source, я потратил много времени на анализ различных СУБД остановился на PostgreSQL о выборе не жалею. Что лучше что хуже написать можно но это был бы радикально длинный пост. даже не знаю...

Дмитрий Иванов
Переезжали так как было желание перевести движок н...

поста совсем не прошу, т.к. представляю, что могло быть ) пришлось переписать с T-SQL кучу кода несколько лет назад интересны были именно причины желание иметь open source вполне всё объясняет

Andrey Lizenko
Ради интереса, т.к. сам подобным занимался - а зач...

в моем случае были сложности с сертификацией oracle UPD: увидел что речь шла не о нем

central hardware
в моем случае были сложности с сертификацией oracl...

мало знаю про оракл, если честно но слышал мнение, что 95% кода переносимо прямо копипастом

Andrey Lizenko
мало знаю про оракл, если честно но слышал мнение,...

в принципе да, однако дьявол кроется в деталях

Andrey Lizenko
мало знаю про оракл, если честно но слышал мнение,...

С копипастом я наткнулся на неадекватное падание производительности при использовании скалярных функция, которые в исходном решении меня не беспокоили в этом отношении. (ЗЫ: MS SQL)

Дмитрий Иванов
С копипастом я наткнулся на неадекватное падание п...

тут такая ещё штука, в которую стукнулся - линукс тюнить надо много больше с MS SQL - скорее приходилось узнавать про СХД и файловые системы, т.к. упиралось, как правило, всё-таки в это, в олтп постгрес тоже не лишён оного, но как-то, субъективно, всё-таки, поменьше

central hardware
в принципе да, однако дьявол кроется в деталях

на этом консалтеры и аутсорсеры и зарабатывают, имхо

Andrey Lizenko
тут такая ещё штука, в которую стукнулся - линукс ...

В данном конкретном случае проблема скорее была в неоптимальных планах выполнения при построчном вызове скалярных функций, но я обошел это просто полностью от них отказавшись в пользу представлений и составных запросов. Многоэтажные JOIN никогда не лезли мне в голову да и всякие неожиданные эффекты которые мало кто может предусмотреть ни к чему.

Дмитрий Иванов
В данном конкретном случае проблема скорее была в ...

тут тоже соглашусь - чем прямее (как рельс), тем проще, что дебажить, что разбираться, где именно проблема

Andrey Lizenko
Ради интереса, т.к. сам подобным занимался - а зач...

Именно для программиста БД — PostgreSQL [куда] более "продвинут", удобен, да и логичен. А вот как "затаскивают" сюда DBA, я не знаю. ;)

Дмитрий Иванов
В данном конкретном случае проблема скорее была в ...

А могли бы не отказываться, кстати: https://wiki.postgresql.org/wiki/Inlining_of_SQL_functions ;)

Andrey Lizenko
тут тоже соглашусь - чем прямее (как рельс), тем п...

Только сейчас нашлась минутка, ну да лучше поздно чем никогда. Функции по умолчанию создаются с параметрами "VOLATILE PARALLEL UNSAFE" что дает указание планировщику даже не рассматривать варианты распараллеливания плана. Если функция только выбирает данные и предполагается к использованию в SELECT в качестве элемента запроса необходимо изменить данные параметры на "STABLE PARALLEL SAFE " В противном случае можно забыть о преимуществах параллельных планов. Решил что без упоминания об этом наш диалог будет несколько однобоким.

Дмитрий Иванов
screenshot Только сейчас нашлась минутка, ну да лучше поздно ...

Just saying: не всякую функцию, которая "только выбирает данные", можно объявлять STABLE, т.е. лучше прочитать документацию при параметры.

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта