ako synchronizovat databazove skupiny podla tabulky?
Honza Pazdziora
adelton na informatics.muni.cz
Úterý Únor 24 09:37:42 CET 2004
On Tue, Feb 24, 2004 at 07:29:25AM +0100, Jan Serak wrote:
> >
> >pouzivam postgresql verzie 7.4.1.
>
> Postgresql neznam, odpoved bude obecna.
Praveze ne. To, ze Oracle po DDL operaci dela commit neznamena, ze
to je obecny princip.
> >ktory by po pridani zaznamu v tabulke skupina vytvoril databazovu skupinu
> >CREATE OR REPLACE FUNCTION skupinaNovyF () RETURNS TRIGGER AS '
> > BEGIN
> > CREATE GROUP NEW.nazov;
> > RETURN NEW;
> > END;
> > ' LANGUAGE 'plpgsql';
> >
> >toto mi samozrejme nefunguje, lebo NEW.nazov je retazec znakov a do CREATE
> >GROUP xyz sa nedava retazec.
Je treba ten prikaz vytvorit a spustit pomoci
execute 'create group ' || new.nazov;
> Podle meho nazoru to nebude fungovat nikdy. Snazite se totiz uvnitr DML
> (Data Manipulation Language) pouzit prikaz DDL (Data Definition
> Language), i kdyz se muze zdat, ze skupina nedefinuje datovou strukturu.
>
> Prikazy DDL jsou VZDY samostatnymi transakcemi. Jak by se mel Postgresql
> (ale i cokoli jineho) podle Vas zachovat, kdybyste hypoteticky dosahl
> sveho zameru a pak mu predlozil:
>
> INSERT INTO vase_tabulka ... (pritom trigger zalozi skupinu)
> ROLLBACK;
> select * from skupina ;
id,nazov
[0 rows of 2 fields returned]
> select * from jezek1 ;
DBD::Pg::st execute failed: ERROR: Relation "jezek1" does not exist.
> /rollback
> select * from jezek2 ;
DBD::Pg::st execute failed: ERROR: Relation "jezek2" does not exist.
> /rollback
> insert into skupina values (1, 'jezek1') ;
[1 row affected]
> select * from jezek1 ;
id
[0 rows of 1 fields returned]
> insert into skupina values (1, 'jezek2') ;
[1 row affected]
> select * from jezek2 ;
id
[0 rows of 1 fields returned]
> select * from skupina ;
id,nazov
'1','jezek1 '
'1','jezek2 '
[2 rows of 2 fields returned]
> /rollback
> select * from jezek2 ;
DBD::Pg::st execute failed: ERROR: Relation "jezek2" does not exist.
Tedy je videt, ze Postgres ma DDL operace ve standardnim transakcnim
modu.
> select * from skupina ;
id,nazov
[0 rows of 2 fields returned]
> drop table skupina ;
[unknown number of rows affected]
> select * from skupina ;
DBD::Pg::st execute failed: ERROR: Relation "skupina" does not exist.
> /rollback
> select * from skupina ;
id,nazov
[0 rows of 2 fields returned]
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, mod_perl, DBI, Oracle, large Web systems, XML/XSL, ...
Only self-confident people can be simple.
Další informace o konferenci Databases