sql >> Database >  >> RDS >> PostgreSQL

Hoe de primaire sleutel van integer naar serieel te converteren?

serial is een pseudo gegevenstype, niet een echt gegevenstype. Het is een integer onderaan met enkele extra DDL-commando's die automatisch worden uitgevoerd:

  1. Maak een reeks (met standaard overeenkomende naam).
  2. Stel de kolom in NOT NULL en de standaard om uit die reeks te tekenen.
  3. Maak de kolom "eigenaar" van de reeks.

Details:

  • Tabellen die seriële primaire-sleutelkolommen gebruiken in Postgres veilig en netjes hernoemen?

Een bigserial is hetzelfde, gebouwd rond een bigint kolom. U wilt bigint , maar dat heb je al bereikt. Een bestaand serial transformeren kolom in een bigserial (of smallserial ), het enige wat u hoeft te doen is ALTER het gegevenstype van de kolom. Sequenties zijn over het algemeen gebaseerd op bigint , dus dezelfde reeks kan worden gebruikt voor elk integer typ.

Een bigint "veranderen" in een bigserial of een integer in een serial , je moet de rest gewoon met de hand doen:

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

Het werkelijke gegevenstype is nog steeds integer / bigint . Sommige clients, zoals pgAdmin, tonen het gegevenstype serial in de reverse-engineered CREATE TABLE script, als alle criteria voor een serial zijn voldaan.




  1. PostgreSQL-schema's / naamruimten met Django

  2. Geaggregeerde sleutel/waarde-paren uit een JSONB-veld afvlakken?

  3. Inloggen met externe services

  4. Geen enkele functie komt overeen met de opgegeven naam en argumenttypes