Moin,
ich bin neu hier und wollt erstmal loswerden wie glücklich ich bin ein pg Forum gefunden zu haben!
Ich hatte bis jetzt hauptsächlich mit Oracle zu tun und wollt nun privat lieber pg benutzen.
Bei oracle gibts die möglichkeit einen “Instead of Trigger” zu prgrammieren( pl/sql), das ist bei pg ja durch rules gelöst, allerdings gelingt es mir nicht, eine rule zu schreiben, die das tut was ich will.
Ich ahbe eine View, die zwei tabellen vereint.
tab 1:
name | laufendenummer
tab 2:
ort | laufendenummer_tab1
view:
laufendenummer | name | ort
ich möchte nun in die view etwas einfügen, und brauch dazu die neue laufendenummer von tab 1 (ist ein serial).
wie komm ich an die nummer?
mit NEW.laufendenummer gehts ja nicht…
hab das problem bisher nicht gehabt und rat jetzt einfach mal…
probier mal, eine sequenz zu erstellen und dann mit nextval(‘sequenz_name’) den wert zu nehmen. müsste bei oracle ja auch so sein (zumindest erinnere ich mich daran…).
jetzt stell ich mir nur die frage ob es dabei noch zu fehlern kommen kann, die wahrscheinlichkeit, dass jemand genau dann die sequenz hoch zählt während ich dabei bin meinen zweiten wert einzufügen ist ja sehr gering… oder wird das sowieso vom dbms vehindert?
würde mich interessieren wie ihr das macht oder ob es bei euch noch nie dazu kam, dass zwei voneinander abhängende werte gleichzeitig eingefügt werden, also 1:n beziehung.
anbei mein quellcode:
create sequence sequence1 start 1;
drop view adressen_komplett;
create or replace view adressen_komplett as
select a.laufendenummer,a.name,b.ort,c.ort as ortb
from stamm_kontakt a,stamm_adresse b,stamm_adresse c
where
a.laufendenummer=b.laufendenummer
AND
a.laufendenummer=c.laufendenummer;
CREATE or replace RULE test AS ON INSERT TO adressen_komplett DO INSTEAD
(insert into stamm_kontakt (laufendenummer,name)values(nextVal(‘sequence1’),NEW.name); insert into stamm_adresse (laufendenummer,ort)values(currVal(‘sequence1’),NEW.ort));
This section describes PostgreSQL’s functions for operating on sequence objects. Sequence objects (also called sequence generators or just sequences) are special single-row tables created with CREATE SEQUENCE. A sequence object is usually used to generate unique identifiers for rows of a table. The sequence functions, listed in Table 9-34, provide simple, multiuser-safe methods for obtaining successive sequence values from sequence objects.
Das ‘Moin’ hört sich nach Norddeutschland an. Da gibt es aber auch Gebiete wo man ‘moin, moin’ sagt.
Den “Oracle-Spezialist” habe ich definiert, ein Lügner bist Du schon garnicht und Du hast Dich auch nicht falsch ausgedrückt. Ich wollte Dir auch nichts unterstellen. Du kennst vielleicht auch schon das: In den Firmen gibt es immer 2 Fraktionen, da sind die UNIX Freaks und die Windows Freaks, das gleiche ist bei den Datenbanken , die einen arbeiten mit Oracle und … unter Unix, die anderen arbeiten mit Datenbanken unter Windows. Ich bin in beiden Lagern zuhause und habe damit auch keine Probleme. Was bei mir hängen geblieben ist, sind so einige (-) Erfahrungen mit Oracle-Spezialisten, die abgehoben hatten. Dieses wollte ich Dir aber nicht andichten. Also, bleib so wie Du bist.
Mir fällt im Augenblick keine bessere Lösung ein und mit einer Transaktion bist Du auf der ganz sicheren Seite.
“moin” ist das einzig wahre!! und das kann man, entgegen der weitläufigen Meinung, zu jeder Tages oder Nachtzeit benutzen… also nicht nur Morgens!! Ist ein all-round Begriff der im grunde immer passt!
Komme aus Hamburg.
diese spezialo-typen kenn ich auch aber eher im bereich betriebssysteme…da dann aber auch ganz hart… mit datenbanken ist mir das noch nicht so unter gekommen. (allerdings hab ich auch noch nicht so die erfahrung…)