Heim > Datenbank > MySQL-Tutorial > Wie generiert man Untersequenzen in PostgreSQL mithilfe von Sequenzen und Triggern?

Wie generiert man Untersequenzen in PostgreSQL mithilfe von Sequenzen und Triggern?

Linda Hamilton
Freigeben: 2025-01-24 05:51:38
Original
960 Leute haben es durchsucht

How to Generate Subsequences in PostgreSQL Using Sequences and Triggers?

In diesem Artikel wird detailliert beschrieben, wie Sie Teilsequenzen in PostgreSQL mithilfe von Sequenzen und Triggern generieren. Das Szenario umfasst eine Tabelle mit einem zusammengesetzten Primärschlüssel (id, seq), der eine benutzerdefinierte Lösung erfordert, um für jeden id.

eine eindeutige Sequenz zu erstellen

Die Lösung besteht darin, zwei Tabellen zu erstellen und Trigger zu implementieren:

Tabellenstruktur:

  • Dinge: In dieser Tabelle werden Hauptentitäten gespeichert, mit id als Primärschlüssel.
  • Zeug: Diese Tabelle speichert Teilsequenzen, die id (Fremdschlüsselreferenzierung things), seq (die Teilsequenznummer) und notes enthalten. Der Primärschlüssel ist die Kombination aus id und seq.

Auslöser und Funktionen:

  1. things Tabellentrigger (make_thing_seq): Dieser Trigger wird nach jeder Einfügung in die things-Tabelle ausgeführt. Es erstellt eine neue Sequenz mit dem Namen thing_seq_{id} für jedes neue id.

  2. stuff Tabellentrigger (fill_in_stuff_seq): Dieser Trigger wird vor jeder Einfügung in die stuff-Tabelle ausgeführt. Es ruft den nächsten Wert aus der entsprechenden Sequenz (thing_seq_{id}) basierend auf dem eingefügten id ab und weist ihn der Spalte seq zu.

Beispielimplementierung:

Der folgende Code demonstriert die Tabellenerstellung und Triggerimplementierung:

<code class="language-sql">-- Create the tables
CREATE TABLE things (
    id serial primary key,
    name text
);

CREATE TABLE stuff (
    id integer references things,
    seq integer NOT NULL,
    notes text,
    primary key (id, seq)
);

-- Trigger in things table to create new sequences
CREATE OR REPLACE FUNCTION make_thing_seq() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
begin
  EXECUTE format('CREATE SEQUENCE IF NOT EXISTS thing_seq_%s', NEW.id); -- Added IF NOT EXISTS
  RETURN NEW;
end;
$$;

CREATE TRIGGER make_thing_seq AFTER INSERT ON things FOR EACH ROW EXECUTE PROCEDURE make_thing_seq();

-- Trigger in stuff table to use correct sequence
CREATE OR REPLACE FUNCTION fill_in_stuff_seq() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
begin
  NEW.seq := nextval(format('thing_seq_%s', NEW.id));
  RETURN NEW;
end;
$$;

CREATE TRIGGER fill_in_stuff_seq BEFORE INSERT ON stuff FOR EACH ROW EXECUTE PROCEDURE fill_in_stuff_seq();</code>
Nach dem Login kopieren

Dieses Setup stellt sicher, dass durch das Einfügen von Daten in things und stuff automatisch eindeutige Teilsequenzen für jedes id generiert werden, wodurch die Integrität des zusammengesetzten Primärschlüssels gewahrt bleibt. Die IF NOT EXISTS-Klausel wurde zur Funktion make_thing_seq hinzugefügt, um Fehler zu verhindern, wenn eine Sequenz für eine bestimmte ID bereits vorhanden ist.

Das obige ist der detaillierte Inhalt vonWie generiert man Untersequenzen in PostgreSQL mithilfe von Sequenzen und Triggern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage