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

Oprettelse af en PostgreSQL-sekvens til et felt (som ikke er id'et for posten)

Brug CREATE SEQUENCE :

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

Tilføj derefter en kolonnestandard til scores.job_id :

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

Hvis du vil binde sekvensen til kolonnen (så den slettes, når kolonnen slettes), kør også:

ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;

Alt dette kan erstattes med at bruge pseudodatatypen serial for kolonnen job_id til at begynde med:

  • Sikkert og rent omdøb tabeller, der bruger serielle primærnøglekolonner i Postgres?

Hvis din tabel allerede har rækker, kan du indstille SEQUENCE til den næsthøjeste værdi og udfyld manglende serieværdier i tabellen:

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

Valgfrit:

UPDATE scores
SET    job_id = nextval('scores_job_id_seq')
WHERE  job_id IS NULL;
  • Sådan kontrolleres en sekvens effektivt for brugte og ubrugte værdier i PostgreSQL
  • Postgres ændrer rækkefølgen manuelt
  • Hvordan nulstiller man postgres' primære nøglesekvens, når den falder ud af synkronisering?

Den eneste resterende forskel er en serial kolonne er også sat til NOT NULL . Det kan du måske også ønske dig:

ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;

Men du kan ikke bare ændre typen af ​​et eksisterende integer :

ALTER TABLE scores ALTER job_id TYPE serial;

serial er ikke en egentlig datatype. Det er kun en notationsbekvemmelighedsfunktion til CREATE TABLE .
I Postgres 10 eller senere overvej en IDENTITY kolonne:

  • Automatisk stigning i tabelkolonnen


  1. Kaldning af en Oracle-procedure med en PL/SQL-opsamlingstypeparameter via .NET

  2. RDLC LocalReport Eksport til Excel virkelig langsom

  3. Fejl i MySQL ved indstilling af standardværdi for DATE eller DATETIME

  4. Adgang med Microsoft SQL Server – Importer store datasæt ved hjælp af SSIS