<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Problem z domeną]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=375&amp;type=atom"/>
	<updated>2010-01-18T21:43:00Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=375</id>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1719#p1719"/>
			<content type="html"><![CDATA[wygląda na to, że sobie poradzilem z tym problemem.
Możliwe, że to jakiś bug postgresq, ale kiedy podałem jawnie w insercie wartości pole3 i pole4, to w końcu poszedł, triggery się uruchomiły i ustawiły odpowiednie wartości dla tych pól.

bez sensu było zrobione, że domena była not null, skoro jeszcze w definicji tabeli osoba, która ustawiała ten typ, zaznaczała od razu do tego not null. wychodziło podówjne not null...

zatem usunąłem z domenu opcję not null, wróciłem do poprzedniej wersji inserta i działa.

dodam na koniec, że nie ja pisałem tę bazę danych...

dziękuję za zainteresowanie i serdecznie pozdrawiam
misiek]]></content>
			<author>
				<name><![CDATA[misiekalfa]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1040</uri>
			</author>
			<updated>2010-01-18T21:43:00Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1719#p1719</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1717#p1717"/>
			<content type="html"><![CDATA[Masz dwa triggery, które działają na tą samą operację na tej samej tabeli. Możesz pokazać kod tego drugiego (wystarczy funkcja)]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-01-18T21:15:29Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1717#p1717</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1716#p1716"/>
			<content type="html"><![CDATA[ponieważ drugie zapytanie jest rozszerzeniem pierwszego, to wklejam tylko wynik tego drugiego
[code]
trigger_catalog; trigger_schema; trigger_name; event_manipulation; event_object_catalog; event_object_schema; event_object_table; action_statement; action_orientation; condition_timing

"rek";"public";"TABLE_PREF_BIU0";"INSERT";"rek";"public";"TABLE_PREF";"EXECUTE PROCEDURE "TABLE_PREF_BIU0"()";"ROW";"BEFORE"

"rek";"public";"TABLE_PREF_BIU0";"UPDATE";"rek";"public";"TABLE_PREF";"EXECUTE PROCEDURE "TABLE_PREF_BIU0"()";"ROW";"BEFORE"

"rek";"public";"TABLE_PREF_BIU2";"INSERT";"rek";"public";"TABLE_PREF";"EXECUTE PROCEDURE "TABLE_PREF_BIU2"()";"ROW";"BEFORE"

"rek";"public";"TABLE_PREF_BIU2";"UPDATE";"rek";"public";"TABLE_PREF";"EXECUTE PROCEDURE "TABLE_PREF_BIU2"()";"ROW";"BEFORE"

[/code]]]></content>
			<author>
				<name><![CDATA[misiekalfa]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1040</uri>
			</author>
			<updated>2010-01-18T21:12:53Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1716#p1716</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1712#p1712"/>
			<content type="html"><![CDATA[Pokaż wynik zapytania
[code]
selecy * from information_schema.triggers where trigger_name="TABLE_PREF_BIU0"
[/code]

[quote]
Z tabelą powiązane są 2 triggery działające przed insertem lub updatem.
[/quote]
Na co dziala drugi trigger?

I jeszcze wynik
[code]
selecy * from information_schema.triggers where event_object_table="TABLE_PREF"
[/code]]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-01-18T20:49:57Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1712#p1712</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1711#p1711"/>
			<content type="html"><![CDATA[[code]
CREATE TRIGGER "TABLE_PREF_BIU0"
  BEFORE INSERT OR UPDATE
  ON "TABLE_PREF"
  FOR EACH ROW
  EXECUTE PROCEDURE "TABLE_PREF_BIU0"()
[/code]]]></content>
			<author>
				<name><![CDATA[misiekalfa]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1040</uri>
			</author>
			<updated>2010-01-18T20:42:09Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1711#p1711</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1710#p1710"/>
			<content type="html"><![CDATA[Pokaz definicje triggera, to co pokazales to definicja funkcji.]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-01-18T20:38:35Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1710#p1710</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1709#p1709"/>
			<content type="html"><![CDATA[TABLE_APP jest to tabela powiązana poprzez referencje z TABLE_PREF.
wyżej wymienione zapytanie zawsze zwraca poprawny wynik.

Czy to nie dziwne, że mając umieszczoną linię zaraz po begin raise notice, to powinna się ona wykonać za każdym razem kiedy trigger jest wywołyany? Czy nie implikuje to jednocześnie tego, że trigger nie jest wywoływany, skoro to ostrzeżenie się nie pojawia?]]></content>
			<author>
				<name><![CDATA[misiekalfa]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1040</uri>
			</author>
			<updated>2010-01-18T20:31:43Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1709#p1709</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1708#p1708"/>
			<content type="html"><![CDATA[Co to jest table_app;

Czy jesteś pewien ze to zapytanie
[quote]
SELECT "POLE3", "POLE4" INTO "VAR_POLE3","VAR_POLE4" FROM "TABLE_APP" WHERE "POLE2"=40365;
[/quote]
Zwraca jakieś dane?]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-01-18T20:21:30Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1708#p1708</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1707#p1707"/>
			<content type="html"><![CDATA[proszę, oto triggery
[code]
CREATE OR REPLACE FUNCTION "TABLE_PREF_BIU0"()
  RETURNS trigger AS
$BODY$
DECLARE
    "VAR_POLE3" INTEGER;
    "VAR_POLE4" INTEGER;
BEGIN
raise notice 'test';
   SELECT "POLE3", "POLE4" INTO "VAR_POLE3","VAR_POLE4" FROM "TABLE_APP" WHERE "POLE2"=NEW."POLE2";
   
   NEW."POLE3"="VAR_POLE3";
   NEW."POLE4"="VAR_POLE4";

    IF(TG_OP = 'INSERT') THEN NEW."POLE8"='F'; 
        END IF;  
   RETURN NEW;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
[/code]

Drugi trigger nie zmienia żadnych pól typu T_IDENTIFIER. Dodam, że ostrzeżenie 'test' się nie wyświetla

pozdrawiam
misiek]]></content>
			<author>
				<name><![CDATA[misiekalfa]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1040</uri>
			</author>
			<updated>2010-01-18T19:33:43Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1707#p1707</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1706#p1706"/>
			<content type="html"><![CDATA[Nie wiem jak wygladaja triggery i czy poprawnie wypelniaja pozostale pola
ale ten inserktory podalest,  sam bez dodatkowych triggerow sie nie uda bo podczas wstawiania pomijasz pola ktore sa 'not null' (pole3 i pole4).
Chyba musisz pokazac definicje triggera, ktory dziala przed insertem.]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-01-18T19:23:25Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1706#p1706</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Problem z domeną]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1705#p1705"/>
			<content type="html"><![CDATA[Witam.

Mam problem z jedną domeną. Właściwie to problem nie dotyczy domeny jako takiej, ale jest z nią mocno powiązany.
Ale od początku. Mam taką oto tablicę:
[code]
CREATE TABLE "TABLE_PREF"
(
  "POLE1" "T_IDENTIFIER" NOT NULL,
  "POLE2" "T_IDENTIFIER" NOT NULL,
  "POLE3" "T_IDENTIFIER", 
  "POLE4" "T_IDENTIFIER",
  "POLE5" "T_IDENTIFIER",
  "POLE6" "T_IDENTIFIER" NOT NULL,
  "POLE7" "T_PTS",
  "POLE8" "T_BOOL" NOT NULL DEFAULT 'F'::bpchar,
  "POLE9" "T_PTS",
  "POLE10" "T_PTS",
  "POLE11" "T_PTS",
  "POLE12" "T_PTS",
  CONSTRAINT "PK_TABLE_PREF" PRIMARY KEY ("POLE1"),
  CONSTRAINT "FK_TABLE_PREF_APP_1" FOREIGN KEY ("POLE2", "POLE3")
      REFERENCES "TABLE_APP" ("POLE1", "POLE2") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE,
  CONSTRAINT "FK_TABLE_PREF_APP_2" FOREIGN KEY ("POLE4")
      REFERENCES "TABLE_APP" ("POLE3") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE,
  CONSTRAINT "TABLE_PREF_POOL" FOREIGN KEY ("POLE4", "POLE5")
      REFERENCES "ER_STUDIES_POOL" ("POLE2", "POLE3") MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE NO ACTION,
  CONSTRAINT "AK2_TABLE_PREF" UNIQUE ("POLE4", "POLE3", "POLE5"),
  CONSTRAINT "AK3_TABLE_PREF" UNIQUE ("POLE3", "POLE5"),
  CONSTRAINT "AK_TABLE_PREF" UNIQUE ("POLE5", "POLE2", "POLE3")
)
[/code]
Nie ma znaczenia jak się pola nazywają, etc.
Do tego domena T_IDENTIFIER ma postać:
[code]
CREATE DOMAIN "T_IDENTIFIER"
  AS integer
  NOT NULL
   CONSTRAINT "T_IDENTIFIER_check" CHECK ((VALUE > 0));
[/code]

Z tabelą powiązane są 2 triggery działające przed insertem lub updatem.

teraz. mam sobie takie oto zapytanie:
[code]insert into "TABLE_PREF" ("POLE1","POLE2","POLE5","POLE6") values (1,40365,13,4);[/code]

Wywołanie tej metody w pgAdminie końcy się zwróceniem błędu:
[quote]BŁĄD:  domena "T_IDENTIFIER" nie zezwala na puste wartości[/quote]

Dziwi mnie to bardzo, gdyż jak widać żadna z wartości przekazanych jako parametr nie jest nullem. Dodatkowo w jednym z triggerów są uzupełniane pozostałe pola tupy T_IDENTIFIER, więc to też nie to. Acha, najdziwniejsze jest dla mnie to, że błąd jest zwracany już przed wywołaniem triggera.

Dlatego do Was droga społeczności postgresa kieruję to pytanie: co jest nie tak?

pozdrawiam
misiek]]></content>
			<author>
				<name><![CDATA[misiekalfa]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1040</uri>
			</author>
			<updated>2010-01-18T18:58:02Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1705#p1705</id>
		</entry>
</feed>
