Benutzte Referenz eines Foreign-key prüfen

Fragen und Probleme rund um die Abfragespache SQL.

Benutzte Referenz eines Foreign-key prüfen

Beitragvon mickeymaus91 » Mi 2. Mai 2007, 14:30

Hallo zusammen!

Ich habe eine Tabelle A die von vielen verschiedenen Tabellen in der DB referenziert wird. Ich möchte gerne prüfen ob ein Eintrag in Tabelle A schon mit irgendeiner dieser Tabellen verknüpft ist oder noch nicht.
Gibt es dafür einen Befehl?

Gruß
MickeyMaus91
mickeymaus91
Neuer Benutzer
 
Beiträge: 3
Registriert: Mi 2. Mai 2007, 13:28

Beitragvon akretschmer » Mi 2. Mai 2007, 14:58

mickeymaus91 hat geschrieben:Hallo zusammen!

Ich habe eine Tabelle A die von vielen verschiedenen Tabellen in der DB referenziert wird. Ich möchte gerne prüfen ob ein Eintrag in Tabelle A schon mit irgendeiner dieser Tabellen verknüpft ist oder noch nicht.
Gibt es dafür einen Befehl?

Gruß
MickeyMaus91


Vermutlich nicht direkt. Du kannst versuchen, einen Eintrag zu löschen. Falls es einen Fehler gibt, dann wird er referenziert.
Das kanst Du in einer function machen und den Error abfangen, damit es Dir keine TX zerhaut.

Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5937
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon mickeymaus91 » Mi 2. Mai 2007, 15:02

Hallo,

das ist vermutlich nicht so eine gute Idee.
Denn wenn er noch nicht referenziert ist möchte ich ihn ja nicht löschen.
Ich möchte ja nur wissen ob er referenziert wird.

Gruß
mickeymaus91
mickeymaus91
Neuer Benutzer
 
Beiträge: 3
Registriert: Mi 2. Mai 2007, 13:28

Beitragvon akretschmer » Mi 2. Mai 2007, 15:05

mickeymaus91 hat geschrieben:Hallo,

das ist vermutlich nicht so eine gute Idee.
Denn wenn er noch nicht referenziert ist möchte ich ihn ja nicht löschen.


Wir haben Transaktionen. Setze einen Savepoint und fahre zu diesem zurück.

Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5937
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon mickeymaus91 » Mi 2. Mai 2007, 15:11

Ok. Stimmt das ginge, könnte danach einen Rollback machen.

Falls doch noch jemand eine Befehl kennt mit dem das geht, immer her damit.

Nur so ein Gedanke: Der PGAdminIII kann doch die DB auch analysieren und solche Datensätze aufspüren. Wie macht der das denn?
mickeymaus91
Neuer Benutzer
 
Beiträge: 3
Registriert: Mi 2. Mai 2007, 13:28

Beitragvon akretschmer » Mi 2. Mai 2007, 15:15

mickeymaus91 hat geschrieben:Der PGAdminIII kann doch die DB auch analysieren und solche Datensätze aufspüren. Wie macht der das denn?


Wenn das so ist, ist die Lösung einfach: logge die Statements, die PGAdmin absetzt.


Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5937
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon akretschmer » Mi 2. Mai 2007, 15:51

mickeymaus91 hat geschrieben:Der PGAdminIII kann doch die DB auch analysieren und solche Datensätze aufspüren. Wie macht der das denn?


Btw.: man kan in pg_depend nachschauen, welche Abhängigkeiten bestehen. Dort kannst Du auch zählen, wieviel Tabellen auf die ref. Tabelle verweisen. Aber das geht nicht auf Record-Ebene hinab IIRC.

http://www.postgresql.org/docs/8.1/interactive/catalog-pg-depend.html

Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5937
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon shinchan » Mo 8. Okt 2007, 12:04

pg_depend ist auch dabei akretschmer :)

Ich denke was er sucht oder gesucht hat war etwas wie

Code: Alles auswählen
SELECT DISTINCT w.oid, w.relname
FROM pg_class a, pg_depend d, pg_rewrite r,  pg_class w
WHERE a.oid = d.refobjid
AND d.objid = r.oid
AND r.ev_class = w.oid
AND a.relname <> w.relname
AND a.oid = '12345'


Ersetze die oid und du kriegst für das objekt die abhängigen :)

Gruß shinchan
shinchan
Neuer Benutzer
 
Beiträge: 10
Registriert: Mo 8. Okt 2007, 12:00

Beitragvon peterdd » Mi 14. Nov 2007, 06:19

akretschmer hat geschrieben:Vermutlich nicht direkt. Du kannst versuchen, einen Eintrag zu löschen. Falls es einen Fehler gibt, dann wird er referenziert.


Ui, der Tipp kann aber IMHO ins Auge gehen, wenn die FOREIGN KEYs die Eigenschaften ON DELETE CASCADE oder ON DELETE SET NULL oder ON DELETE NOACTION haben. Denn dann wird doch klaglos der Eintrag in der Tabelle A gelöscht, oder?
peterdd
Neuer Benutzer
 
Beiträge: 7
Registriert: Di 6. Nov 2007, 18:26

Beitragvon ads » Mi 14. Nov 2007, 14:10

peterdd hat geschrieben:Ui, der Tipp kann aber IMHO ins Auge gehen, wenn die FOREIGN KEYs die Eigenschaften ON DELETE CASCADE oder ON DELETE SET NULL oder ON DELETE NOACTION haben. Denn dann wird doch klaglos der Eintrag in der Tabelle A gelöscht, oder?


Klar ... aber dann hat derjenige, der die Tabellen erstellt hat, das so gewollt und das zu verantworten. Wenn ich ein CASCADE da rein schreibe, dann muss ich auch damit rechnen, das da Daten rekursiv gelöscht werden. Die Datenbank kann nicht wissen, wie wichtig die Daten sind ...


Aus dem Grund ist der Standardwert bei REFERENCES ja auch: "Schreie laut und brich mit einer Fehlermeldung ab" :D :D
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support
ads
Erfahrener Benutzer
 
Beiträge: 4147
Registriert: Mi 8. Feb 2006, 11:58
Wohnort: MD


Zurück zu SQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste