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

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

ПыСы, кстати, в Оракле есть пакеты и в них можно сделать переменные, доступные внутри сесси.
Это я к
SarinДа я тут вспомнил про постгрис. А ведь он единственный в своём роде. Такого вроде даж в супермонстрах типа оракла нету. Наследование отношений, свои типы.
И типы в оракле есть. Вот наследования нет, но я пока не могу придумать, где бы она так нужна была. Т.е. можно, но не обязательно...
...
Рейтинг: 0 / 0
29.05.2006, 19:05
    #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
30.05.2006, 21:02
    #33761839
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в постгрисе выставить переменную.
Вот в руле такая строка:
Код: plaintext
1.
insert into B (id, ...) values (new.id, ...);
вызвала увелечение последовательности на еденицу.

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

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

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

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

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

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


2Sarin По поводу переменных - поиск рулит. (В т.ч. что-то по поводу новых веяний).
...
Рейтинг: 0 / 0
31.05.2006, 11:19
    #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
31.05.2006, 11:19
    #33762678
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в постгрисе выставить переменную.
ZemA
можете посмотреть скриншот
...
Рейтинг: 0 / 0
31.05.2006, 11:36
    #33762764
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в постгрисе выставить переменную.
ZemAможет я что-то делаю не так :-) вы не так читаете.
Давно уже идет обсуждение реплики Сарина о РУЛЕ а не вашего долбанного триггера, который всем ясен вдоль и поперек.

Еще раз. Вы ответили на реплику Сарина о РУЛЕ, видимо не озаботясь ее прочитать. Вам на это и указали. Т.ч. давайте пустоболить именно о РУЛЕ, а не о триггерах. По триггерам к вам вопросов не имею.
...
Рейтинг: 0 / 0
31.05.2006, 11:39
    #33762779
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в постгрисе выставить переменную.
ZemA ZemA
можете посмотреть скриншот
мля.
что вам тут? Помойка?
или некуда скриншоты засовывать?
...
Рейтинг: 0 / 0
31.05.2006, 12:13
    #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
31.05.2006, 12:42
    #33763072
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в постгрисе выставить переменную.
ZemAа currval еще ни кто не отменял
блаблабла
1. напишите руле на вставку (скажем во вью) в общем виде. Когда никто не гарантирует, что в id таблицы вставляется дефаулт, а не какое-то заранее вычисленное значение. Т.е. такое руле, которое бы правильно отрабатывало при любом синтаксически верном инсерте - и по дефаулту на id , и при конкретном переданном значении id. Причем усложним задачу - напишите руле с условием на new.id. (единственный нормальный способ который мне известен - запихать и условие и все руле (все стейтменты) внутрь одной процедуры, а не вычислять в самом руле - ни в его стейтментах, ни в условиях)


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


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

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

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

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

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

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


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

автор писал:

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

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


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