Wie PrimaryKey erstellen?

peinliche frage, aber kann mir jemand sagen, wie ich mit pgAdmin III
einen primärschlüssel festlegen kann?

im pop-up menü unter “neue Spalte” und eigenschaften tabelle kann ich nichts finden!

suche schon ewig in google, aber lande keinen treffer!?

bin ich blind oder fange ich es ganz falsch an?

vielen dank!
cu
bernd

Hallo bernd,

Tabellenname anklicken ==> rechte Maustaste ==> Eigenschaften ==> Constrains ==> Hinzu ==> …



mfg

fristo

Super!

Vielen Dank!

Bin schon ganz verzweifelt gewesen! :slight_smile:

Alles ganz einfach - wenn man weiß wie!


Danke
cu

hallo,

habe mich riesig gefreut über die einfache Lösung des primary key, doch leider klappt es bei mir nicht. ich füge unter Contrains (im Register Eigenschaften) den Namen ein, aber ich kann es nicht bestätigen. Was mach ich falsch?

ein primärschlüssel ist ja ein etwas schwammiger meist logischer begriff, der sich einer handvoll technischen dinge zuordnen laesst

er umfasst ein oder mehrere felder einer tabelle (einfacherweise beschränken wir uns auf ein feld -> ID)

das feld soll meistens automatisch generiert werden, deshalb benutzt man den datentyp serial

und er muss eindeutig sein, daher muss man ein CONSTRAINT darüber definieren.

in PGAdminIII:

  1. neues feld mit datentyp Serial oder BigSerial (evtl. not null)
  2. ein Primary-Key Constraint auf dieses Feld definieren

du brauchst also dort 2 Arbeitsschritte

wenn du die tabelle via DML erzeugen willst sieh es so aus

CREATE TABLE <deine table> (
  [color="#4169e1"]dein_id_feld SERIAL[/color] [color="#2e8b57"]NOT NULL[/color] [color="#9932cc"]PRIMARY KEY[/color],
  .... 
)

du solltest noch wissen, dass SERIAL kein echter Datentyp ist, sondern eine Art MACRO … das dir ein INTEGER Feld erzeugt und eine SEQUENCE die als “DEFAULT” des Feldes verwendung findet -> automatisches generieren von Integer-Werten …

Schritt 1 ist nicht unbedingt notwendig.

Man könnte auch einen natural primary key haben, den kann man genausogut mit einem Constraint belegen.

ja … ich habe ja darauf hingewiesen, dass sich das beispiel auf den gemeinten fall beschraenkt -> er will sowas wie ein ID feld …

@Posti
was ads meint:

es gibt auch leute die “natuerliche schluessel” verwenden … also z.B. sowas wie die Auftrag-Nr fuer den Auftrag,

dann wuerdest du das Feld AuftragNr mit PRIMARY KEY definieren …

ein PRIMARY KEY kann sich auch ueber mehrere Felder erstrecken … z.B. bei einer Auftrags-Position dann ueber AutragNr + PositionNr

Man sollte sich beim Design der DB auf eine Strategie festlegen …

Hast du denn ein passendes Feld ausgewählt?

CU Uwe

Zwei Dinge:

  1. ein (Primary-Key) Constraint hat immer einen Namen …
    diesen Namen hast du eingegeben (Reiter 1 - “Eigenschaften”) … wenn deine ID-Spalte z.B. id_table heisst, dann nenn den Constraint pk_id_table … ist nur eine Empfehlung

  2. dann musst du noch sagen, welche Felder zu dem Primärschlüssel gehören (Reiter 2 - “Spalten”), das ist dann sinnvoller Weise die eine ID-Spalte die du dafuer vorgesehen hast.

Das mag auf den ersten Blick umständlich sein - aber dank dem Hinweis von ads weisst du, dass Primärschlüssel über mehrere Felder gehen könnten. Die kannst du also unter Reiter 2 erledigen.

oder du machst das per DML:

ALTER TABLE my_table ADD PRIMARY KEY (id_table[color="Silver"], nochn_feld, usw ... [/color]);

dann wird automatisch ein Name fuer den Constraint vergeben … der auch pk_id_table heisst :wink:

Hallo,

mit PostgreSQL habe ich erst seit kurzem zu tun. Installation hat bestens geklappt. Zum managen nutze ich pgAdmin III.

Beim Erstellen einer Spalte mit dem Datentyp serial, welche später als inkrementieller Primärschlüssel dienen soll, ist die Erstellung von pgAdmin III mit der folgenden Meldung abgebrochen worden:

“FEHLER: Sequenz muss selben Eigentümer wie die verknüpfte Tabelle haben.”

Bitte um Hilfe, wie man diese Meldung interpretiert und den Konflikt löst.

Danke.

Gruß,

Vitali

Hi,

“FEHLER: Sequenz muss selben Eigentümer wie die verknüpfte Tabelle haben.”

hm… was will dir diese Fehlermeldung wohl sagen?
Hast du schonmal beide Eigentümer überprüft?

Gruss Toni

Hi,

bin nicht ganz sicher, wo ich suchen soll.

Was ist in der Fehlermeldung mit Sequenz genau gemeint? Die Datenbank ist neu erstellt und es gibt keine Sequenzen.

Danke.

Vitali

Hi,

habe die Datenbank neu angelegt und den Eigentümer dieser sofort definiert. Jetzt klappt es.

Es würde mich dennoch interessieren, warum es nicht ging. Ich hatte, meiner Meinung nach, alle Eigentümereigenschaften und Beziehungen kontrolliert. Offensichtlich doch etwas übersehen.

Hat Jemand eine Idee was?

Gruß und Danke,

Vitali

du hast die tabelle unter einem anderen user erzeugt als mit dem du dich nun zum estellen des serial-feldes angemeldet hast.

wenn du z.B. beim erzeugen der Tabelle mit ‘postgres’ angemeldet warst, empfielt es sich, dass du auch beim adden des serial-feldes als ‘postgres’ angemeldet bist.

weil halt dabei eine sequence erzeugt wird und das dbms moechte, dass es den selben owner hat wie die table.

Hallo,

danke für die logische Erklärung. Werde in Zukunft darauf achten.

Gruß,

Vitali