sql >> Database >  >> RDS >> PostgreSQL

Een PostgreSQL-reeks naar een veld maken (wat niet de ID van de record is)

Gebruik CREATE SEQUENCE :

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

Voeg vervolgens een kolomstandaard toe aan scores.job_id :

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

Als u wilt binden de volgorde naar de kolom (zodat deze wordt verwijderd wanneer de kolom wordt verwijderd), voer ook uit:

ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;

Dit alles kan worden vervangen door het pseudo-gegevenstype serial . te gebruiken voor de kolom job_id om te beginnen:

  • Tabellen veilig en netjes hernoemen die kolommen met seriële primaire sleutels gebruiken in Postgres?

Als uw tabel al rijen heeft, wilt u misschien de SEQUENCE . instellen naar de volgende hoogste waarde en vul ontbrekende seriële waarden in de tabel in:

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

Optioneel:

UPDATE scores
SET    job_id = nextval('scores_job_id_seq')
WHERE  job_id IS NULL;
  • Hoe een reeks efficiënt te controleren op gebruikte en ongebruikte waarden in PostgreSQL
  • Postgres wijzigt handmatig de volgorde
  • Hoe de primaire sleutelreeks van postgres resetten wanneer deze niet meer synchroon loopt?

Het enige overgebleven verschil, een serial kolom is ook ingesteld op NOT NULL . Misschien wil je dat ook niet:

ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;

Maar jij kan niet verander gewoon het type van een bestaand integer :

ALTER TABLE scores ALTER job_id TYPE serial;

serial is geen echt gegevenstype. Het is gewoon een handige notatiefunctie voor CREATE TABLE .
Overweeg in Postgres 10 of later een IDENTITY kolom:

  • Tabelkolom automatisch verhogen


  1. Hoe Query Windows en andere tabbladen te Docken / UnDock in SQL Server Management Studio (SSMS) - SQL Server / TSQL-zelfstudie, deel 21

  2. Hoe bereken je de totale reisuren tussen stad x en y en vice versa

  3. Hoe verander ik SQL Server 2005 in hoofdlettergevoelig?

  4. Gebruik NEWSEQUENTIALID() om een ​​oplopende GUID te maken in SQL Server