Dies ist ein Hilfe-Forum für alle Fragen rund um Linux, Netzwerk, Datenbanken und Programmiersprachen.
Anmelden    Forum    Registrieren    Suche    FAQ

Foren-Übersicht » Datenbanken » Postgres




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
 
Autor Nachricht
 Betreff des Beitrags: Postgres / Funktionen /Transaktionen
 Beitrag Verfasst: Do. 14.Feb.2008 12:37 
Offline
Bluescreener
Bluescreener

Registriert: Do. 14.Feb.2008 12:33
Beiträge: 6
Hi,

gibt es eine Möglichkeit eine Funktion in Postgres zu schreiben die mir Daten in eine Tabelle einfügt und dies in/mit einer Transaktion macht?

Das was ich im Handbuch gelesen habe finde ich da sehr verwirrend.
Die Idee ist möglichst im Code keine eigenen INSERT/UPDATE/DELETE Statements zu verwenden sondern ausschliesslich stored procedures zu verwenden, in Postgres wären das dann eben die normalen Functions.

EDIT:
Ich habe einen Newsgroup-Eintrag vom 17.04.2003 gefunden, in dem behauptet wird in Postgres wäre per Definition jede Funktion eine Transaktion.
Kann das jemand bestätigen?
Im Handbuch habe ich dazu, (noch) nichts gefunden.


Nach oben 
 Profil  
 
 Betreff des Beitrags: Re: Postgres / Funktionen /Transaktionen
 Beitrag Verfasst: Do. 14.Feb.2008 17:24 
Offline
Bluescreener
Bluescreener

Registriert: So. 27.Jan.2008 09:54
Beiträge: 11
Wohnort: Wiener Neustadt
Bei deiner frage ist eines zu bedenken: es gibt in postgresql aus usersicht keinen transaktionslosen zustand.
wenn du also ein einfaches "select now()" machst, ist das bereits eine transaktion (das muss so sein).
eine funktion wird also immer in der selben transaktion ausgeführt wie das darübergeordnete statement.

in meinem beispiel: now() läuft in der selben transaktion wie das SELECT, das das now() aufruft.
das gilt auch für geschachtelte funktionen.

lg,

hans-jürgen schönig

_________________
--
Cybertec Schönig & Schönig GmbH
Hans-Jürgen Schönig
URL: http://www.postgresql-support.de
PostgreSQL Support, Schulungen, Cluster, Consulting


Nach oben 
 Profil  
 
 Betreff des Beitrags: Re: Postgres / Funktionen /Transaktionen
 Beitrag Verfasst: Do. 14.Feb.2008 17:53 
Offline
Bluescreener
Bluescreener

Registriert: Do. 14.Feb.2008 12:33
Beiträge: 6
Und wenn das darüber geordnete Statement in keiner Transaktion ausgeführt wird?
Vielleicht verstehe ich das auch nur nicht richtig.

Ich poste einfach mal pseudo Code.
Ich könnte in meinem Anwendungscode folgendes Statement zusammen bauen und ausführen.
Code:
  1.  
  2. BEGIN;
  3. INSERT INTO anschriften(name1, name2) VALUES('oliver', 'denter') -- Hier jetzt den Primary-Key holen und
  4. INSERT INTO adressen(suchname, adressnummer, anschriftenid) values ('denter', '10001', idAusVorherigemStatement);
  5. COMMIT;
  6.  


besser gefallen würde mir aber, da ich dann in meinem Anwendungscode nur FUNCTIONS rufen kann eine FUNCTION ala

Code:
  1.  
  2. CREATE FUNCTION addAdr
  3. BEGIN;
  4. INSERT INTO anschriften(name1, name2) VALUES('oliver', 'denter') -- Hier jetzt den Primary-Key holen und
  5. INSERT INTO adressen(suchname, adressnummer, anschriftenid) values ('denter', '10001', idAusVorherigemStatement);
  6. COMMIT;
  7.  


was jedoch mit einem Fehler beim erzeugen der FUNCTION quittiert wird.
Bedeutet das folgende FUNCTION macht genau das gleiche wie das obige, nicht funktionierende Beispiel?

Code:
  1.  
  2. CREATE FUNCTION addAdr
  3. INSERT INTO anschriften(name1, name2) VALUES('oliver', 'denter') -- Hier jetzt den Primary-Key holen und
  4. INSERT INTO adressen(suchname, adressnummer, anschriftenid) values ('denter', '10001', idAusVorherigemStatement);
  5.  


Folgendes möchte ich in meinem Anwendungscode nämlich nicht machen.
Wäre ein komplettes Statement (pseudo-Code)
Code:
  1.  
  2. string sqlQuery = "BEGIN; " +
  3.                         "addAdr();
  4.                         "COMMIT;"
  5. SqlObj.Exec(sqlQuery)
  6.  


Nach oben 
 Profil  
 
 Betreff des Beitrags: Re: Postgres / Funktionen /Transaktionen
 Beitrag Verfasst: Sa. 16.Feb.2008 15:24 
Offline
Bluescreener
Bluescreener

Registriert: So. 27.Jan.2008 09:54
Beiträge: 11
Wohnort: Wiener Neustadt
da gibt es ein wenig verwirrung:

SELECT some_func();

ist exakt das gleiche wie ...

BEGIN;
SELECT some_func();
COMMIT;

es gibt keinen unterschied. BEGIN und COMMIT dienen nur dazu, befehle zusammenzufassen. hast du kein BEGIN / COMMIT ist trotzdem jedes statement für sich eine transaktion.

lg,

hans

_________________
--
Cybertec Schönig & Schönig GmbH
Hans-Jürgen Schönig
URL: http://www.postgresql-support.de
PostgreSQL Support, Schulungen, Cluster, Consulting


Nach oben 
 Profil  
 
 Betreff des Beitrags: Re: Postgres / Funktionen /Transaktionen
 Beitrag Verfasst: Sa. 16.Feb.2008 19:17 
Offline
Bluescreener
Bluescreener

Registriert: Do. 14.Feb.2008 12:33
Beiträge: 6
Ah, ok Danke. :)


Nach oben 
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
 
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Foren-Übersicht » Datenbanken » Postgres



Ähnliche Beiträge

SuSE 8.2 --- Apache --- PHP Funktionen??? PHP, HTML, DHTML, JavaScript, XML, CGI, Perl Xaero
Postgres unter Windows zum laufen bringen Postgres bolderdash
Funktionen und array´s ? Newbiefragen Günni
Email Funktionen ausgehebelt? Linux, BSD, Unix & co. Krawallfisch
Kann man in PHP rekursive Funktionen schreiben? PHP, HTML, DHTML, JavaScript, XML, CGI, Perl Traumtänzer_79
 

Wer ist online?

Mitglieder in diesem Forum: Keine Mitglieder und 1 Gast

 
 

 
Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
Linkpartner:
Chat-Krefeld -  Tief im See -  Tierheilkunde-Forum  -  Bodybuilding-Forum -  geekdiscussions.org