Pull to refresh

Comments 8

Оффтопичный вопрос, не знаю куда с ним прикнуться. Почему в Postgres нет SQL-функции, выбрасывающей исключение?

Сейчас у меня почти в каждом проекте есть подобный код:

create or replace function pg_temp.raise_exception(s text)
returns text language plpgsql as
$$
begin
    raise exception '%', s;
end;
$$;

Это позволяет прямо из SQL-выражения выбрасывать исключение (например, когда очевидно что с данными обнаружилась какая-то беда).

Можно ли такую функцию внедрить как функцию SQL прямо в код движка или есть какой-то принципиальный момент не позволяющий этого? Причём, желательно иметь возможность также указать код ошибки (хочется внутри проекта определять свои кастомные коды, а не кодировать их внутри текстовой строки сообщения об ошибке)

Это PL/pgSQL - один из языков, встроенных в Postgres. Именно через него я в своём примере вызываю исключение.

А я бы хотел встроенную в сам язык SQL, такую же как sin()/cos() и т.д.

Гм, а в какой СУБД есть подобная функция?

Не знаю, может ни в какой. Это моя идея добавить такую функцию. Возможно(?) сделать загружаемое расширение которое её добавит

Смысл есть, он хотя бы в том что PL/pgSQL - это медленно. При первом вызове прямо видно как оно неторопливо ворочается.

Ответа на вопрос, поставленного в заголовки, в статье нет.

Назвали бы: ora2pg краткое описание возможностей.

Хотелось бы в статье увидеть обоснование выбора. Почему вообще Postgres? А не MySQL, например?

Postgres академичен и фитчаст, а MySQL при смерти (и Оракл не даст ему очухаться)

Sign up to leave a comment.

Information

Website
www.postgrespro.ru
Registered
Founded
Employees
501–1,000 employees
Location
Россия
Representative
Иван Панченко