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

Кто имел опыт переноса хранимок с Oracle/MsSql на хранимки PostgreSQL?

Расскажите, как оно? Норм, или боль и страдания?

38 ответов

27 просмотров

я лично переписывал в ручную но было обидно что нету джобов. Нужно будет через airflow либо через cron в ручную шедулить их

Kamoliddin Nabijonov
я лично переписывал в ручную но было обидно что не...

Как нет? pgAgent, pg_cron, мб. ещё чтото. Встроенных нет - ну так тут работает принцип unix: каждое приложение должно выполнять одну задачу.

При переносе с oracle сложности могут возникнуть если активно используются переменные пакета. Также, вложенные функции pl/pgSQL не поддерживает. Вообще, на одном из прошлых pgConf был доклад о том, как для перевода большого проекта на postgresql был написан парсер pl/SQL-кода с генерацией pl/pgSQL. Что-то требовалось вручную доделывать конечно. К сожалению, делать из этого продукт или публиковать код они не планировали.

Radist
При переносе с oracle сложности могут возникнуть е...

При переводе с Оракла в Postgresql обычно проще просто тупо все заново переписать с учетом особенностей Postgres

Radist
При переносе с oracle сложности могут возникнуть е...

А так был платный конвертор от какой то компании белоруской вроде который умел плюс минус конвертить код хранимок. Но тут уж кому что дешевле или делать чтото вида копипасты из одной субд в другую либо попилить денжат на создание нового проекта заточенного под конкретную субд

Alex Ignatov
При переводе с Оракла в Postgresql обычно проще пр...

Зависит от размеров проекта. Переписать несколько мегабайт кода ни разу не просто.

Radist
Зависит от размеров проекта. Переписать несколько ...

Чем больше тем проще решится на то чтобы все с нуля пульнуть. А так, вообще ,кажется ,что хранимки- это моветон ведущий как раз к проблеме привязки к субд.

Боль и страдание и из-за хранимое из из-за того что только конченные (сами знаете) кто обмазываются хранимками и код у этих хороших людей это го+++ некоторая коричневая субстанция

central hardware
Боль и страдание и из-за хранимое из из-за того чт...

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

Dmitriy-Sviridov Автор вопроса
central hardware
Боль и страдание и из-за хранимое из из-за того чт...

Т.е. юзать хранимки в PostgreSQL - это в принципе плохая практика?

Dmitriy Sviridov
Т.е. юзать хранимки в PostgreSQL - это в принципе ...

И нет, в меру вполне норм, но тащить в хранимки бизнес логику или не дай бог вообще писать весь сервер на хркнимках это однозначно плохая идея

Dmitriy-Sviridov Автор вопроса
Dmitriy Sviridov
Т.е. юзать хранимки в PostgreSQL - это в принципе ...

Нет, отличная практика, и написать бизнес-логику на них — тожэ часто правильное решэние. Тот чел просто хейтер хранимок.

Alex Ignatov
Чем больше тем проще решится на то чтобы все с нул...

Просто пока не запретили что то, на чем логика приложения написана. Имхо, сами хранимки/функции, сама их суть, моветоном не является. Норм тема.

Ilya Anfimov
Нет, отличная практика, и написать бизнес-логику н...

Просто некоторые не могут грамотно декомпозировать систему. Код обработки данных должен быть как можно ближе к данным. И когда из БД на уровень приложения начинают данные тянуть, потом их меняют, и персистят, с удивленными лицами, почему данные не консистентные - ты начинаешь говорить про mvvc, про locks и т.д, и в лицах программистов server side видишь удивление, то понимаешь - А может взять грамотного db developer, который все это знает, вникнет в логику и просто для критичных бизнес кейсов предоставит хранимки, а server side Разрабы из dtoшки в dtoшку переложат? :)))

Первая причина делать хранимые процедуры — не перекачивать объёмы необработанных данных из СУБД в приложение. Вторая причина — язык программирования приложения тоже может поменяться. Третья, вы её называли, — в хранимках легче управлять изоляцией транзакций. Ещё? Но при этом мы не хотим получить vendor lock на конкретную СУБД. Логичным был бы вариант использовать ORM, который генерит хранимки под данную СУБД. В базе получится говнокод, но у нас останутся приличные исходники, которые можно запустить на другой СУБД. Для критичных по быстродействию мест надо будет переписать на нативный PL/SQL (при этом не выкидывая "универсальную" версию, продолжая поддерживать её в актуальном состоянии). Что вы про это думаете? Какой бы рецепт посоветовали для проекта, который только начинается? (Предполагая, что в проекте будет много бизнес-кода, который пишут прикладные программисты)

alex che
Первая причина делать хранимые процедуры — не пере...

Вендор лок - несуществующая проблема, если ваша база опенсорсная

alex che
Первая причина делать хранимые процедуры — не пере...

Вы предлагаете получить только те возможности, которые доступны во всех ведущих СУБД, а от остальных отказаться?

Radist
Вы предлагаете получить только те возможности, кот...

Я предлагал для 5% критичных мест писать на нативном языке, но при этом иметь для этих частей workaround, который делает неоптимально, но универсально. Просто при переводе с одной СУБД на другую приходится сталкиваться с тем, что спец-возможности СУБД были задествованы даже там, где без этого моно было обойтись

alex che
Я предлагал для 5% критичных мест писать на нативн...

Ваш орм сам станет субд, если будет уметь всё и цеплять бекендом любую другую субд, это значит запретят его :)

alex che
Я предлагал для 5% критичных мест писать на нативн...

Ну то есть если так подходить к ситуации, то ваш орм - постгрес, а при миграции на другие базы таблички в них просто надо перемещать по FDW, перкписывать ничего не надо, неоптимально но универсально

alex che
Первая причина делать хранимые процедуры — не пере...

>Третья, вы её называли, — в хранимках легче управлять изоляцией транзакций. На самом деле -- гораздо тяжэлее. >Но при этом мы не хотим получить vendor lock на конкретную СУБД. Если вы этого не хотите -- то с хранимками вам будет тяжэло, что уж там. >Какой бы рецепт посоветовали для проекта, который только начинается? Не знаете, что пилить -- пилите трёхзвенку. Выбор трёхзвенки редко выглядит шоу-стоппером или критической ошыбкой в дальнейшэм. Это не значит, что трёхзвенки всем хорошы -- выбор любой другой архитетуры часто обоснован. Но они обычно достаточно приемлемы, и их можно выбрать если всё непонятно.

Ilya Anfimov
>Третья, вы её называли, — в хранимках легче управ...

Трёхзвенка в контексте обсуждаемого вопроса означает "максимум логики в application server, минимум в хранимках"?

alex che
Трёхзвенка в контексте обсуждаемого вопроса означа...

Да, максимум логики в application server. Который только для логики, он не делает презентацыю и ввод данных как таковой. И дажэ определённый state и изоляцыю транзакцый можно в application server.

Darafei Praliaskouski
Ну то есть если так подходить к ситуации, то ваш о...

Не советую, у того же oracle_fdw хреновая производительность на вставку в oracle, скорее всего из-за того, что данные передаются по одной строке. Хотя мб. в последней версии и починили, но года 3 назад было всё плохо. Будто этого мало, у oracle есть баги в индексах (вроде) при работе в режиме serializeable, с которым работает oracle_fdw.

Radist
Не советую, у того же oracle_fdw хреновая произво...

так просили же универсально и не обязательно быстро

alex che
Первая причина делать хранимые процедуры — не пере...

Так абстрактно не смогу ответить. Мы же программисты, работаем для того, чтобы автоматизировать бизнес задачи😊 у всего есть требования, затем люди, которые эти требования качественно выполнят. Если нет профильных разрабов на БД, делать утверждение, что код надо писать именно там и нигде иначе, рискует убить проект сразу, т.к работать надо с теми ресурсами, что есть. Если же говорить про идеальный мир, с зоной компетенции, обязанностей и ответственностей, то среднестатистически у разраба БД будет скил выше по работе с базами, чем у чувака, который кодит на Java или c#. Понятно, что и они могут быть порой круче db developerов профильных, но все же. В итоге, если есть критичные по целостности и консистентности данных сценарии у бизнеса, я бы их пилил как можно ближе к данным и профильными спецами, включая разграничения политик доступа и т.д. Что касается orm, то лично мне он не нравится. На Java того же Mybatis или Querydsl достаточно вместо hibernate или EclipseLink, иначе начинаешь решать не проблемы БД, не проблемы приложения на Java, а ограничения orm на ровном месте. Бизнес часто не понимает это и в принципе я поддерживаю. Если есть вариант взять более гибкое решение без проблем, зачем тратить деньги на решение пустых проблем. :) В итоге: я бы брал open source БД, тот же Postgres, в идеале хотя бы 2 профильных db developer'ов, остальных ребят на server side java, например. Orm не юзал бы

Darafei Praliaskouski
так просили же универсально и не обязательно быстр...

А то, что serializeable by design подразумевает, что вам, возможно, придётся выполнить rollback и заново повторить, не пугает? При том, что на стороні postgresql у вас обычный read committed, от которого такой подставы никто не ожидает (есть небольшая вероятность deadlock-а, но при правильном подходе к блокировкам, его можно исключить в большинстве случаев).

Radist
А то, что serializeable by design подразумевает, ч...

люди, которые хотят взаимозаменяемые базы, должны страдать

Darafei Praliaskouski
люди, которые хотят взаимозаменяемые базы, должны ...

Ну так в чём проблема просто написать под каждую БД код? Это принесёт гораздо меньше страданий, если требуется код максимально близкий к данным.

alex che
Первая причина делать хранимые процедуры — не пере...

Посмотрите опыт lingualeo, была статья на Хабре, как они огребли от этого

Radist
Кстати, под java jdbi довольно хорош.

У нас механизмы Spring Data для этих целей😊

Nikolay Underground
Посмотрите опыт lingualeo, была статья на Хабре, к...

А где про огребли? Я видел только что они повышение нагрузки в 5 раз спокойно перенесли именно с этим подходом.

Если разработчики сервер-сайда не знают про локи, транзакции и т.п. - то таковых нужно поменять на тех, кто знает. Идея "разместить логику ближе к данным" и предоставить наружу интерфейс из набора функций кажется хорошей только на первый взгляд, несколько раз видел такой подход на практике - незамедлительно после ухода первого "грамотного db developer, который все это знает", который писал первую версию этих самых хранимок код превращается в ужасное УГ, кол-во ХП начинает расти как на дрожжах, а знания о том, что какая из них делает - стремительно утрачиваются. Если у вас есть достаточный запас "грамотных db developerов, которые все это знают" то, наверное, это может сработать. Но проще заменить тех одров, которых вы почему-то называете "server side разработчиками" на настоящих, которые в курсе про транзакции, уровни изоляции, mvcc, локи и пр.

Sergey Bezrukov
Если разработчики сервер-сайда не знают про локи, ...

потому и написал, что минимум 2=) Чтобы не получилось такого, что один уходит и некому поддерживать. Что касается - "Заменить на тех, кто знает", тут двоякая ситуация. Раньше были FullStack разработчики в основном, кодили и Front-End и Back-End (Application Code + DB Code). В какой-то момент стало понятно, что эффективнее взять профильного Front-End, чем пытаться найти Fullstack, который будет круто знать и как Front-End, и как Java (неважно, какой язык, просто для примера), и также круто шарить в базах. Ну не найдёте вы такого спеца на рынке, либо за ЗП на 50% выше рынка, но это плохо по причине, что у вас один человек будет за всё отвечать и работа не будет параллелиться. Короче, проще найти профильного Front-End и профильного Back-End. Но вот почему то решили, что разделение надо закончить на отделении JavaScript/TypeScript от всего остального, а Application Code + DB Code пусть один продолжает кто-то кодить. На мой взгляд это не совсем правильно, хотя это явно сейчас распространено.

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта