wersjonowanie - jak? [postgres]
cienki_bolek - 14-12-2006 16:08
wersjonowanie - jak? [postgres]
Witam Mam taki maly problem i chcialbym go elegancko rozwiazac. Otoz sa dwie tabele: dokument i dokument_old. Maja taka sama strukture z ta roznica ze w dokument_old dodalem kolumne d_version. w dokument jest primary key na d_id. wiersze w dokument_old sa jednoznacznie identyfikowane przez d_id i d_version. i teraz powstaje problem jak zrobic cos takiego aby przy insercie do dokument_old automatycznie wstawial kolejna wartosc d_version dla danego dokumentu, pewnie trigery ale jak? inserty do dokument_old ida w przypadku update w dokument, moze zaczac juz w tym miejscu? w tej chwili ta funkcje realizuje aplikacja ale chcialbym mozliwie jak najwiecej pracy zrzucic na baze.
inna sprawa jest to ze w tej chwili insert do dokument_old robi zapytanie: insert into document_old select * from document where... potem update d_version. Jest to o tyle wygodne, ze nie musze znac struktury tabeli, a kolumna d_version znajduje sie na koncu z parametrem default 0. Jednak pojawi sie problem w przypadku dodania nowej kolumny. Z tego co sie orientuje chyba nie mozna w postgresie dodac nowej kolumny przed juz istniejaca. nowe kolumny dodawane sa zawsze na koncu, tak? jesli tak to chyba nie pozostaje nic innego jak tylko wymieniac wszystkie pola po kolei w tym insercie.
postgres 8.1 pozdr cienki bolek
=?iso-8859-2?q?Filip_Rembia=B3kowski?= - 14-12-2006 16:08
On 27 Lis, 13:20, cienki_bolek <premislauer.cut.t...@o2.pl> wrote: > Witam > Mam taki maly problem i chcialbym go elegancko rozwiazac. > Otoz sa dwie tabele: dokument i dokument_old. Maja taka sama strukture z ta roznica > ze w dokument_old dodalem kolumne d_version. > w dokument jest primary key na d_id. > wiersze w dokument_old sa jednoznacznie identyfikowane przez d_id i d_version. > i teraz powstaje problem jak zrobic cos takiego aby przy insercie do > dokument_old automatycznie wstawial kolejna wartosc d_version dla danego dokumentu, pewnie trigery ale jak? > inserty do dokument_old ida w przypadku update w dokument, moze zaczac juz w tym miejscu? to chyba s?uszne podej?cie - w kodzie triggera mo?esz sprawdzi?, jaka by?a ostatnia zarchiwizowana wersja dokumentu i doda? do tego 1 :) co? a'la select INTO latest_archived_version coalesce( max(d_version)+1, 1 ) FROM dokument_old WHERE d_id=NEW.d_id;
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 14-12-2006 16:08
cienki_bolek wrote: > Witam > Mam taki maly problem i chcialbym go elegancko rozwiazac. > Otoz sa dwie tabele: dokument i dokument_old. Maja taka sama strukture z > ta roznica > ze w dokument_old dodalem kolumne d_version. > w dokument jest primary key na d_id. > wiersze w dokument_old sa jednoznacznie identyfikowane przez d_id i > d_version. > i teraz powstaje problem jak zrobic cos takiego aby przy insercie do > dokument_old automatycznie wstawial kolejna wartosc d_version dla danego > dokumentu, pewnie trigery ale jak? > inserty do dokument_old ida w przypadku update w dokument, moze zaczac > juz w tym miejscu? > w tej chwili ta funkcje realizuje aplikacja ale chcialbym mozliwie jak > najwiecej pracy zrzucic na baze.
Prosto triggerem. Ale jeste? pewien, ?e potrzebne Ci s? kolejne numerki wersji? Przecie? to jest potrzebne tylko do sortowania. Ja u?ywam timstampa, te? sie ?adnie sortuje, a do tego niesie dodatkow? i istotn? informacje, kiedy dany rekord zosta? zast?piony przez nowy. Wystarczy default now().
> inna sprawa jest to ze w tej chwili insert do dokument_old robi zapytanie: > insert into document_old select * from document where... > potem update d_version. > Jest to o tyle wygodne, ze nie musze znac struktury tabeli, a kolumna > d_version znajduje sie na koncu z parametrem > default 0. > Jednak pojawi sie problem w przypadku dodania nowej kolumny. Z tego co > sie orientuje chyba nie mozna w postgresie > dodac nowej kolumny przed juz istniejaca. nowe kolumny dodawane sa > zawsze na koncu, tak? > jesli tak to chyba nie pozostaje nic innego jak tylko wymieniac > wszystkie pola po kolei w tym insercie.
Zdecydowanie wymienia? kolumny.
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
[postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
zanotowane.pldoc.pisz.plpdf.pisz.pllubiatowo.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|