Dropsequenz und Kaskade

Ich möchte die in der Tabelle verwendete Sequenz und die Tabelle selbst mit CASCADE in einer Anweisung löschen, erhalte jedoch NOTICE und die Tabelle wird nicht gelöscht. Zum Beispiel:

<code>CREATE SEQUENCE seq1;
CREATE TABLE t1 (f1 INT NOT NULL DEFAULT nextval('seq1'));
</code>

Und dann, wenn ich es tue:

<code>DROP SEQUENCE seq1 CASCADE;
</code>

Ich erhalte folgende Meldung und die Tabelle wird nicht gelöscht:

<code>NOTICE:  drop cascades to default for table t1 column f1
</code>

Ich mache definitiv etwas falsch, aber dies sind meine ersten Schritte in PostgreSQL.

Antworten auf die Frage(4)

warum Sie eine Sequenz manuell erstellen - vielleicht haben Sie eine Rechtfertigung, oder vielleicht liegt es an Gewohnheiten, mit einem anderen DBMS zu arbeiten.

Wenn Sie keinen besonderen Bedarf haben, verwenden Sie dieSERIAL Pseudo-Typ und wenn Sie die Tabelle fallen die Sequenz (en) hinter demSERIAL Spalte (n) werden ebenfalls gelöscht.

 Chris Koston04. Apr. 2012, 16:42
Anfangs dachte ich, dass ich die Sequenz, die das SERIAL-Makro verwendet, nicht initialisieren kann, aber jetzt stellte ich fest, dass sie eine reguläre Sequenz erstellt, die ich normal initialisieren könnte. Wechseln Sie zu SERIAL, danke.
Lösung für das Problem

mals ein abhängiges Objekt einer zugehörigen Sequenz und istnoch nie fallen gelassen von a

<code>DROP SEQUENCE ... CASCADE;
</code>

Nur eine DEFAULT-Wert-Zeichnung aus der Sequenz "hängt" von der Sequenz ab und wird auf NULL gesetzt, wenn die Sequenz mit gelöscht wirdCASCADE.

Es ist umgekehrt: Wenn die Sequenz einer Tabellenspalte gehört, wird sie mit einem gelöscht

<code>DROP TABLE f1 CASCADE;
</code>

Damit eine Sequenz zu einer Tabellenspalte gehört, können Sie entweder dieserial tippe wie Milen schon vorgeschlagen hat. Oder du kannstÄNDERN Sie eine vorhandene Sequenz:

<code>ALTER SEQUENCE seq1 OWNED BY t1.f1;
</code>

Sie können dies auch verwenden ... und ich empfehle Ihnen auch, eine Seriennummer mit Primärschlüssel zu verwenden, damit Sie eine Spalte eindeutig identifizieren können.

Sequenz und kaskadieren diese Aktion. WährendStandard kann nicht ohne die Sequenz existieren und wird daher gelöscht, die Tabelle und die Spaltekönnen existieren ohne die Reihenfolge, so bleiben sie.

Wenn Sie dies so festlegen, wird beim Löschen der Tabelle die Sequenz nicht gelöscht. Sie können jedoch festlegen, dass die Sequenz von der Spalte abhängt, mit der sie verwendet wirdes fallen automatisch, wenn Sie die fallen lassenTabelle. Sie können dies tun, indem Sie den Eigentümer der Sequenz ändern, oder stattdessen SERIAL verwenden. Wenn Sie festlegen, dass eine Spalte vom Typ SERIAL ist, wird automatisch eine Sequenz erstellt, ein Standardwert für die Spalte erstellt und diese Spalte zum Eigentümer der Sequenz.

Ihre Antwort auf die Frage