sql >> Databáze >  >> RDS >> PostgreSQL

Vytvoření sekvence PostgreSQL do pole (které není ID záznamu)

Použijte CREATE SEQUENCE :

CREATE SEQUENCE scores_job_id_seq;  -- = default name for plain a serial

Poté přidejte výchozí sloupec do scores.job_id :

ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');

Pokud chcete svázat sekvence ke sloupci (takže se smaže, když je sloupec odstraněn), také spusťte:

ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;

To vše lze nahradit použitím pseudo datového typu serial pro sloupec job_id pro začátek:

  • Bezpečně a čistě přejmenovat tabulky, které používají sloupce sériového primárního klíče v Postgresu?

Pokud vaše tabulka již obsahuje řádky, možná budete chtít nastavit SEQUENCE na další nejvyšší hodnotu a doplňte chybějící sériové hodnoty v tabulce:

SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;

Volitelně:

UPDATE scores
SET    job_id = nextval('scores_job_id_seq')
WHERE  job_id IS NULL;
  • Jak efektivně kontrolovat sekvenci na použité a nepoužité hodnoty v PostgreSQL
  • Postgres ručně upraví sekvenci
  • Jak resetovat sekvenci primárních klíčů postgresu, když se nesynchronizuje?

Jediný zbývající rozdíl, serial sloupec je také nastaven na NOT NULL . To můžete nebo nemusíte chtít také:

ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;

Ale nemůžete stačí změnit typ existujícího integer :

ALTER TABLE scores ALTER job_id TYPE serial;

serial není skutečný datový typ. Je to pouze pohodlná funkce zápisu pro CREATE TABLE .
V Postgres 10 nebo novějších zvažte IDENTITY sloupec:

  • Automaticky zvyšovat sloupec tabulky


  1. Rozdíl v měsících mezi daty v MySQL

  2. Sloupce data v SQL-Serveru (MSSQL-JDBC 3.0) běžícím pod Java 1.7.0 byly načteny jako 2 dny v minulosti

  3. Zvyšte diskovou skupinu VOTE v ASM pro upgrade GI 12.2

  4. Použít e-mailovou adresu jako primární klíč?