powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Переход на Postgres с Firebird'а
23 сообщений из 23, страница 1 из 1
Переход на Postgres с Firebird'а
    #39356119
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парни, помогите с функцией. Должно возвращаться множество строк. Оные получаются несколькими запросами.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create or replace function f ()
returns table (a bigint, b bigint, c bigint) as $$
declare
  r record;
begin
  for r in
    select ... from t1
  loop
    if (r.b is null) then
      for r in
        select ... from t2
      loop
        a = r.a; b = r.b; c = r.c;
        return next;
      end loop;
    else
      a = r.a; b = r.b; c = r.c;
      return next;
    end if;
  end loop;
end; $$ language plpgsql;



Можно ли избавиться от присваивания? a = r.a; b = r.b; c = r.c; Заменить на более изящное решение?

В Firebird'е делал
Код: plsql
1.
select ... from table into :variable, :variable, ...
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39356153
big-trot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
d3a,

SELECT ... FROM table INTO a,b,c;
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39357632
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-trot,

Благодарю.
Странно, но это отражено в TFM в разделе PL/pgSQL - SQL Procedural
Language 41.5.3.
, а в SQL Commands - нет.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39357638
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также хочу отметить для всех переходящих с Firebird'а, что триггеры с inserting/updating/deleting будут выглядеть так:
Код: plsql
1.
2.
3.
IF (TG_OP = ’INSERT’) THEN
IF (TG_OP = ’UPDATE’) THEN
IF (TG_OP = ’DELETE’) THEN
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39357639
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3a,

наверное по тому, что процедурный язык и эскуельы, это мягко говоря не одно и тоже. если вы только начали вникать в pl/pgsql то сюрпризов вас ждёт ещё не мало.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39357643
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парни,
еще вопрос по переходу на Postgres. Раз уж нет триггеров on connect/disconnect, можно ли как-нибудь эмулировать ситуацию? Триггеры на временные таблицы с PRESERVE ROWS запрещены?
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39357645
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonepsycho,
расстраивает, конечно, неполное соответствие стандарту. Например отсутствие create or alter. А с другой стороны список non reserved keywords радует несоответствием.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39357880
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3a,

полное соответствие стандарту, наверное, есть только в описании того самого стандарта. пока что не встречал судб с полным соответствием стандарту, оракл балуется своими плюшками, диби два своими, об май эскуеле и говорить не буду...
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39362709
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парни,

еще вопрос. Раз уж нет триггеров on connect/on disconnect, можно ли как-нибудь эмулировать ситуацию? Триггеры на временные таблицы с PRESERVE ROWS запрещены?
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39363673
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парни,

а есть в постгресе какой-никакой current_connection (типа integer)? Чот я не нашел в RTFM е.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39363687
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3a,
Код: sql
1.
2.
3.
SELECT  pg_backend_pid(); --синий шарик
SELECT current_setting('application_name'); --зелёный
--Какой тебе больше нравится
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39363692
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3aПарни,

а есть в постгресе какой-никакой current_connection (типа integer)? Чот я не нашел в RTFM е.

А что в нем именно должно быть? (особенно при работе через connection pooler)?

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39363724
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Чтобы в триггерах/функциях идентифицировать текущий коннект/сессию.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39363734
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕН,

Благодарю.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39363735
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3aидентифицировать текущий коннект/сессию.Функция для определения, что текущая сессия является текущей - true. Развивай мысль глубже.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39363795
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот еще.

if (tg_op = 'INSERT') then

всегда в upper case? Или же case insensitive? Заранее благодарю.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39363817
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3aА вот еще.

if (tg_op = 'INSERT') then

всегда в upper case? Или же case insensitive? Заранее благодарю.
напишы тест на 3 строки,йопта
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39363837
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3aвсегда в upper case?Полагаешь, зависит от того, как написан инициировавший триггер iNseRt?

d3aИли же case insensitive?Как значение может быть case insensitive?
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39367894
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парни,

непонимание насчет возврата из функции триггера. old/new нужно возвращать ВСЕГДА?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create function F() returns trigger as $$
begin
  if (tg_op = 'INSERT' or tg_op = 'UPDATE') then
    new.column = value;
    return new; -- тут?
  end if;
  return new; -- или тут?
end; $$ language plpgsql;
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39367905
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d3a,

Для `BEFORE` триггеров можно вернуть `NULL`, что отменяет операцию.
В остальных случая возвращаю обычно `NEW` -- триггер должен вернуть что-то.
В вашем случае второй `RETURN` нужен для `DELETE` триггеров, или ошибка будет.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39367914
d3a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,

благодарю.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39368039
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovd3a,

Для `BEFORE` триггеров...
В вашем случае второй `RETURN` нужен для `DELETE` триггеров, или ошибка будет.вот только для 'DELETE' NEW не определено. Нужно (для 'DELETE') возвращать OLD.
...
Рейтинг: 0 / 0
Переход на Postgres с Firebird'а
    #39368080
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

Да, с универсальными тригерами всегда так...
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Переход на Postgres с Firebird'а
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]