sql >> Database >  >> RDS >> PostgreSQL

Hoe zorg ik ervoor dat de primaire sleutel X-cijfers heeft in PostgreSQL?

Je haalt twee aspecten door elkaar:

  • het gegevenstype bepaalde waarden toestaan voor je PK-kolom
  • het formaat je hebt gekozen voor weergave

AUTO_INCREMENT is een niet-standaard concept van MySQL, SQL Server gebruikt IDENTITY(1,1) , etc.
Gebruik een serial kolom in Postgres:

CREATE TABLE users (
  user_id serial PRIMARY KEY
, ...
)

Dat is een pseudo-type geïmplementeerd als integer gegevenstype met een standaard kolomtekening van een bijgevoegde SEQUENCE . integer is gemakkelijk groot genoeg voor uw koffer (-2147483648 tot +2147483647).

Als u getallen met maximaal 8 decimalen echt moet afdwingen, voegt u een CHECK beperking :

CONSTRAINT id_max_8_digits CHECK (user_id BETWEEN 0 AND < 99999999)

Om het nummer op elke gewenste manier weer te geven - 0-opgevuld tot 8 cijfers, gebruik voor jouw geval to_char() :

SELECT to_char(user_id, '00000000') AS user_id_8digit
FROM   users;

Dat is erg snel. Merk op dat de uitvoer text is nu, niet integer .
SQL Fiddle.

Een paar andere dingen zijn MySQL-specifiek in je code:

  • int(8) :gebruik int .
  • datetime :gebruik timestamp .
  • TYPE=INNODB :laat dat gewoon vallen.


  1. Laravel Crypt - Waarden vergelijken

  2. geheel getal buiten bereik en resterende schijfruimte te klein om id om te zetten in bigint en andere oplossingen

  3. Hoe de opgeslagen procedure op sqlfiddle aan te roepen?

  4. Twee invoegquery's met gekoppelde velden