PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come definire una chiave primaria di incremento automatico in PostgreSQL

Per un database relazionale come PostgreSQL, potrebbe essere ampiamente considerato un peccato tra gli sviluppatori non per includere una chiave primaria in ogni tabella. È quindi fondamentale che tu faccia del tuo meglio per aggiungere l'importantissima colonna della chiave primaria a ogni tabella e, fortunatamente, Postgres fornisce due metodi per portare a termine questo compito.

Utilizzo del tipo di dati seriale

La tecnica di gran lunga più semplice e comune per aggiungere una chiave primaria in Postgres è usare il SERIAL o BIGSERIAL tipi di dati quando CREATING una nuova tavola. Come indicato nella documentazione ufficiale, SERIAL non è un vero tipo di dati, ma è semplicemente una notazione abbreviata che dice a Postgres di creare un identificatore univoco con incremento automatico per la colonna specificata.

Di seguito creeremo i nostri semplici books tabella con un SERIAL appropriato tipo di dati per la chiave primaria.

CREATE TABLE books (
  id              SERIAL PRIMARY KEY,
  title           VARCHAR(100) NOT NULL,
  primary_author  VARCHAR(100) NULL
);

Semplicemente impostando il nostro id colonna come SERIAL con PRIMARY KEY allegato, Postgres gestirà tutto il complicato lavoro dietro le quinte e aumenterà automaticamente il nostro id colonna con un valore di chiave primaria univoco per ogni INSERT .

Utilizzo di una sequenza personalizzata

In alcuni rari casi, la natura incrementale standard è incorporata nel SERIAL e BIGSERIAL i tipi di dati potrebbero non essere adatti alle tue esigenze. In questi casi, puoi eseguire la stessa funzionalità di chiave primaria con incremento automatico per la tua colonna creando una SEQUENCE personalizzata , simile al metodo utilizzato nella versione precedente di Oracle.

Forse amiamo particolarmente i numeri pari, ma abbiamo anche una forte avversione per qualsiasi cosa inferiore a 100, quindi vogliamo solo che la nostra chiave primaria venga incrementata di due a partire da 100 per ogni inserto. Questo può essere ottenuto con una SEQUENCE personalizzata così:

CREATE SEQUENCE books_sequence
  start 2
  increment 2;

Ora quando INSERT un nuovo record nei nostri books tabella, dobbiamo valutare il valore successivo della nostra sequenza con nextval('books_sequence') e usalo come nostro id .

INSERT INTO books
  (id, title, primary_author)
VALUES
  (nextval('books_sequence'), 'The Hobbit', 'Tolkien');

SEQUENCES può essere ulteriormente arricchito se lo si desidera, con opzioni come minvalue e maxvalue per indicare ovviamente valori estremi, e anche CYCLE , che consente alla sequenza di eseguire un "ciclo continuo" una volta raggiunto il maxvalue , tornando all'start valore e ricominciare daccapo la salita. Maggiori informazioni possono essere trovate nella documentazione ufficiale.