powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли в постгрисе выставить переменную.
23 сообщений из 23, страница 1 из 1
Можно ли в постгрисе выставить переменную.
    #33759086
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне надо один раз использовать переменную. Идея такая: есть последовательность следующий элемент которой - внешний ключь для отношения A. И в то-же время зависимый ключь для другого отношения B.

Хочу написать правило которое при добавлении записи в A будет добавлять запись в B с тем-же ключом.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33759112
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёта я не понял - а триггер на таблицу не пойдет разве?
На А триггер, который пишет в В. Или я не понял задачу...

ПыСы, кстати, в Оракле есть пакеты и в них можно сделать переменные, доступные внутри сесси.
Это я к
SarinДа я тут вспомнил про постгрис. А ведь он единственный в своём роде. Такого вроде даж в супермонстрах типа оракла нету. Наследование отношений, свои типы.
И типы в оракле есть. Вот наследования нет, но я пока не могу придумать, где бы она так нужна была. Т.е. можно, но не обязательно...
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33759137
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create table A (
  id serial primary key,
  ........
);

create table B (
  id int4 primary key references A,
  ........
);

create function on_insert_into_A()
  returns trigger as
'
begin
  if new.id is not null then
   insert into B (id, ...) values (new.id, ...);
  end if;
  return new;
end;
' language plpgsql;

create trigger trg_on_insert_into_A after insert on A for each row
  execute procedure on_insert_into_A();
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33761839
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот в руле такая строка:
Код: plaintext
1.
insert into B (id, ...) values (new.id, ...);
вызвала увелечение последовательности на еденицу.

Вообще я не боюсь триггеров и ХП. Просто щитаю что их надо приберегать на самый крайний случай. Когда ни чеки, ни рулы уже не помогают.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33761843
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати наледование на практике часто требуется.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33762296
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinВот в руле такая строка:
Код: plaintext
1.
insert into B (id, ...) values (new.id, ...);
вызвала увелечение последовательности на еденицу.

это не она вызвала, она лишь добавила в таблицу "В" id вставленной записи
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33762449
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemA SarinВот в руле такая строка:
Код: plaintext
1.
insert into B (id, ...) values (new.id, ...);
вызвала увелечение последовательности на еденицу.

это не она вызвала, она лишь добавила в таблицу "В" id вставленной записи
дон в корне не прав. Если id - Default "некая ф-я", то каждое упоминание New.id в тексте руле будет вызывать _новое_ вычисление упомянутой ф-ии. (а каждая строка - стейтмент - вызывать пересчет набора, попадающего в условие "нью")
В частности если написано id "дефаулт некствал" (или сириал), то счетчик будет все время навариваться. (См на форуме, обсуждалось. Такоже есть отсылки к форуму разработчиков. Резюме - за такие руле надо руки отрывать. разработчикам субд. Прямо из жо. Или же понимать, что руле в постгресе - вещь, требующая крайне аккуратной работы.)
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33762506
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 ZemA SarinВот в руле такая строка:
Код: plaintext
1.
insert into B (id, ...) values (new.id, ...);
вызвала увелечение последовательности на еденицу.

это не она вызвала, она лишь добавила в таблицу "В" id вставленной записи
дон в корне не прав. Если id - Default "некая ф-я", то каждое упоминание New.id в тексте руле будет вызывать _новое_ вычисление упомянутой ф-ии. (а каждая строка - стейтмент - вызывать пересчет набора, попадающего в условие "нью")
В частности если написано id "дефаулт некствал" (или сириал), то счетчик будет все время навариваться. (См на форуме, обсуждалось. Такоже есть отсылки к форуму разработчиков. Резюме - за такие руле надо руки отрывать. разработчикам субд. Прямо из жо. Или же понимать, что руле в постгресе - вещь, требующая крайне аккуратной работы.)
т.е. по вашему значение последовательности(sequence) после инсерта увеличится на 2?
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33762548
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemA
т.е. по вашему значение последовательности(sequence) после инсерта увеличится на 2?
Если такая рула прописана то да. Я тому свидетель.

Мне вот интересно: а если брать OLD.id? И всётаки: есть в постгрисе переменные? Они вроде даж в мускле есть.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33762645
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemA SarinВот в руле такая строка:
яЕсли id - Default "некая ф-я", то каждое упоминание New.id в тексте руле будет вызывать _новое_ вычисление упомянутой ф-ии.
(См на форуме, обсуждалось. Такоже есть отсылки к форуму разработчиков.
т.е. по вашему значение последовательности(sequence) после инсерта увеличится на 2?
не по-моему, а по разработчески. формальная их отписька - руле - это дескать макрос, а не стейтмент. А атомарности от макроса не требуецца.

Короче пользуйтесь поиском - оттуда - гоу на форум рахработчиков по ссылкам. Кажется там все так же как и раньше.


2Sarin По поводу переменных - поиск рулит. (В т.ч. что-то по поводу новых веяний).
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33762674
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может я что-то делаю не так :-) но
Код: plaintext
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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
CREATE TABLE a
(
  id serial NOT NULL,
  aaa text NOT NULL,
  CONSTRAINT a_pkey PRIMARY KEY (id)
) 
WITH OIDS;

CREATE TABLE b
(
  id int4 NOT NULL,
  CONSTRAINT b_pkey PRIMARY KEY (id),
  CONSTRAINT b_id_fkey FOREIGN KEY (id) REFERENCES a (id)
    ON UPDATE NO ACTION ON DELETE NO ACTION
) 
WITH OIDS;

CREATE OR REPLACE FUNCTION on_insert_into_a()
  RETURNS "trigger" AS
'
begin
  if new.id is not null then
   insert into B (id) values (new.id);
  end if;
  return new;
end;
'
  LANGUAGE 'plpgsql';

CREATE TRIGGER trg_on_insert_into_a
  AFTER INSERT
  ON a
  FOR EACH ROW
  EXECUTE PROCEDURE on_insert_into_a();

insert into a (aaa) values ('a');
insert into a (aaa) values ('b');
insert into a (aaa) values ('c');

select * from a;

------+------
  id  |  aaa
------+------
   1    |  a
   2    |  b
   3    |  c

можете посмотреть скриншот

а у вас так получается?
Код: plaintext
1.
2.
3.
4.
5.
6.
------+------
  id  |  aaa
------+------
   1    |  a
   3    |  b
   5    |  c
или я вас не понимаю? :)
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33762678
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemA
можете посмотреть скриншот
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33762764
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemAможет я что-то делаю не так :-) вы не так читаете.
Давно уже идет обсуждение реплики Сарина о РУЛЕ а не вашего долбанного триггера, который всем ясен вдоль и поперек.

Еще раз. Вы ответили на реплику Сарина о РУЛЕ, видимо не озаботясь ее прочитать. Вам на это и указали. Т.ч. давайте пустоболить именно о РУЛЕ, а не о триггерах. По триггерам к вам вопросов не имею.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33762779
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemA ZemA
можете посмотреть скриншот
мля.
что вам тут? Помойка?
или некуда скриншоты засовывать?
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33762934
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поспокойнее уважаемый

а currval еще ни кто не отменял
Код: plaintext
1.
2.
CREATE OR REPLACE RULE rule_on_insert_into_a AS
    ON INSERT TO a DO INSERT INTO b (id) VALUES (currval('a_id_seq'));
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33763072
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemAа currval еще ни кто не отменял
блаблабла
1. напишите руле на вставку (скажем во вью) в общем виде. Когда никто не гарантирует, что в id таблицы вставляется дефаулт, а не какое-то заранее вычисленное значение. Т.е. такое руле, которое бы правильно отрабатывало при любом синтаксически верном инсерте - и по дефаулту на id , и при конкретном переданном значении id. Причем усложним задачу - напишите руле с условием на new.id. (единственный нормальный способ который мне известен - запихать и условие и все руле (все стейтменты) внутрь одной процедуры, а не вычислять в самом руле - ни в его стейтментах, ни в условиях)


2. речь таки пошла уже не о триггере. ?;o) Этто радовает наз.
Т.с. на литце дрейф аргументов с целью оказаца правым хоть ф чем-то, а не отстаивание уже выскахзанных неверных сентенций. Стратегия безусловно дающая иллюзию успеха. Дерзайте.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33763110
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 ZemAа currval еще ни кто не отменял
блаблабла
1. напишите руле на вставку (скажем во вью) в общем виде. Когда никто не гарантирует, что в id таблицы вставляется дефаулт, а не какое-то заранее вычисленное значение. Т.е. такое руле, которое бы правильно отрабатывало при любом синтаксически верном инсерте - и по дефаулту на id , и при конкретном переданном значении id. Причем усложним задачу - напишите руле с условием на new.id. (единственный нормальный способ который мне известен - запихать и условие и все руле (все стейтменты) внутрь одной процедуры, а не вычислять в самом руле - ни в его стейтментах, ни в условиях)


2. речь таки пошла уже не о триггере. ?;o) Этто радовает наз.
Т.с. на литце дрейф аргументов с целью оказаца правым хоть ф чем-то, а не отстаивание уже выскахзанных неверных сентенций. Стратегия безусловно дающая иллюзию успеха. Дерзайте.

первый пост специально для ваз
авторМне надо один раз использовать переменную. Идея такая: есть последовательность следующий элемент которой - внешний ключь для отношения A. И в то-же время зависимый ключь для другого отношения B.

Хочу написать правило которое при добавлении записи в A будет добавлять запись в B с тем-же ключом.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33763198
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemA первый пост специально для вазеще раз: если вы думаете, что я, подобно вам, не читаю чужие сообщения - вы ошибаетесь.

По ходу беседы (в некоторый ее момент) вы ответили на _конкретную_ реплику пафосным сообщением, не имеющим к той конкретной реплике никакого отношения.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33763203
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в разрезе темы вы "решили начальную задачу", вернее задачу - мотивацию вопроса афтара (для решения которой афтар топега хотел использовать переменные), но ваше то выступление с активным размахиванием аргументами никак не относилось к конкретной реплике, которую якобы опровергало.

"Да или нет"?
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33763942
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пойду с постгрисом побалуюсь на предмет последовательностей.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33764017
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321Да, в разрезе темы вы "решили начальную задачу", вернее задачу - мотивацию вопроса афтара (для решения которой афтар топега хотел использовать переменные), но ваше то выступление с активным размахиванием аргументами никак не относилось к конкретной реплике, которую якобы опровергало.

"Да или нет"?
да, я кое что проглядел :-) (речь о 4 посте)
но если бы автор привел код своей рули думаю этого бы не случилось.
похоже на оправдание, но тем не меннее.
к тому же в предыдущих постах речь шла о триггерах и я подумал что автор запутался :-)
вот так.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33764095
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemAвот такда нема базара


Просто автор вопроса хотел написать _правило_ (см 1-й его пост). В правилах постгреса есть подводные каменюки. А вся эта беседа на повышенных оборотах несколько мешала донести до автора вопроса сей примечательный во всех отношениях факт.
...
Рейтинг: 0 / 0
Можно ли в постгрисе выставить переменную.
    #33764138
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321А вся эта беседа на повышенных оборотах несколько мешала донести до автора вопроса сей примечательный во всех отношениях факт.
согласен.

автор писал:

Вообще я не боюсь триггеров и ХП. Просто щитаю что их надо приберегать на самый крайний случай. Когда ни чеки, ни рулы уже не помогают.
чем триггер хуже чем руля? дольше работает?

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


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