Ressources documentaires pour Mandriva Linux et les Logiciels Libres

PostgreSQL tips : quickly add a surrogate key column

Suppose that you want to add a surrogate key to a table in PostgreSQL to help you quickly identify each rows in a unique way. You can do this easily and quickly by just adding a SERIAL type column. When adding a SERIAL type column to an already filled table, PostgreSQL will automatically fill the column with some values.
To ensure your surrogate key uniqueness, don’t forget to add the UNIQUE constraint : on top of that this will create an index, thus speeding up your join queries on this column.

[sql light= »true »]ALTER TABLE mytable ADD COLUMN id SERIAL UNIQUE;[/sql]


[sql]
test=# \d films
Table « public.films »
Colonne | Type | Modificateurs
———–+————————-+—————
code | character(5) | non NULL
title | character varying(40) | non NULL
did | integer | non NULL
date_prod | date |
kind | character varying(10) |
len | interval hour to minute |
Index :
"firstkey" PRIMARY KEY, btree (code)
test=# SELECT COUNT(*) FROM films;
count
——-
990
(1 ligne)
test=# ALTER TABLE films ADD COLUMN id SERIAL UNIQUE;
NOTICE: ALTER TABLE créera des séquences implicites « films_id_seq » pour la colonne serial « films.id »
NOTICE: ALTER TABLE / ADD UNIQUE créera un index implicite « films_id_key » pour la table « films »
ALTER TABLE
test=# \d films
Table « public.films »
Colonne | Type | Modificateurs
———–+————————-+——————————————————–
code | character(5) | non NULL
title | character varying(40) | non NULL
did | integer | non NULL
date_prod | date |
kind | character varying(10) |
len | interval hour to minute |
id | integer | non NULL Par défaut, nextval(‘films_id_seq’::regclass)
Index :
"firstkey" PRIMARY KEY, btree (code)
"films_id_key" UNIQUE, btree (id)
test=# SELECT id FROM films LIMIT 5;
id
—-
1
2
3
4
5
(5 lignes)
test=# SELECT id FROM films ORDER BY id DESC LIMIT 5;
id
—–
990
989
988
987
986
(5 lignes)
[/sql]

Aucun commentaire jusqu'à présent.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Catégories

My Tweets