Si vous venez d'une formation C, un type de chaîne de caractères dans PostgreSQL n'est pas un tableau de caractères.
Pour chaque type foo
dans PostgreSQL, il existe un type de tableau correspondant foo[]
qui dénote un tableau de valeurs de type foo
. N'utilisez les types de tableau que si vous ne prévoyez pas de les manipuler beaucoup à l'intérieur de la base de données ; si vous le faites, il est généralement préférable de normaliser le tableau dans une table distincte.
En dehors des types de tableaux, il existe différents types de caractères :
-
"char"
(les guillemets doubles sont obligatoires) :un seul caractère. Principalement utilisé dans les tableaux de catalogue. N'utilisez pas ce type à moins que vous ne sachiez ce que vous faites. -
character(n)
ouchar(n)
:chaîne de caractères de longueur fixe. Peu importe ce que vous y rangerez, il sera toujours rembourré avec des espaces sur le côté droit. Le comportement, tel que dicté par la norme SQL, est parfois surprenant, vous souhaitez donc rarement ce type. -
text
:chaîne de caractères de longueur arbitraire. C'est le type que vous souhaitez pour les chaînes de caractères, sauf si vous souhaitez que la base de données impose une limite de longueur. -
character varying(n)
ouvarchar(n)
:c'est la même chose quetext
avec une limite de longueur supplémentaire.
Pour terminer par un exemple :
CREATE TABLE strtest(
id serial PRIMARY KEY,
sc "char",
c character(10),
vc character varying(10),
vca character varying(10)[]
);
INSERT INTO strtest (sc, c, vc, vca)
VALUES (
'x',
'short',
'short',
ARRAY['short1', 'short2', 'short3']
);
SELECT sc, c, vc, vca[2] FROM strtest;
sc | c | vc | vca
----+------------+-------+--------
x | short | short | short2
(1 row)