Re: Traduction PostgreSQL

From: Francois Suter <dba(at)paragraf(dot)ch>
To: Patrick Welche <prlw1(at)newn(dot)cam(dot)ac(dot)uk>
Cc: Erwan DUROSELLE <EDuroselle(at)seafrance(dot)fr>, pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Traduction PostgreSQL
Date: 2003-11-10 14:09:33
Message-ID: 82723835-1387-11D8-9520-000393427520@paragraf.ch
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

> patrimoine=# select 2 + '3';
> ?column?
> ----------
> 5
> (1 row)
>
> '3' est un chaine de caracteres (literal string), 2 est un nombre
> entier
> (int4), donc la chaine de caracteres '3' est converti en nombre entier
> pour la somme.

Je ne suis pas sûr que ce soit la bonne réponse. En effet, en SQL
standard, les chaînes de caractères sont marquées par des guillemets
(double quotes) et pas des apostrophes (single quotes). Les apostrophes
sont utilisées dans PostgreSQL pour forcer le type d'un chiffre. Sans
apostrophes, tout chiffre est considéré comme étant un smallint. Avec
apostrophes, on le force à coller au type d'un colonne. Exemple:

# create table toto (chiffre bigint);
# insert into toto values (4);
# select * from toto where chiffre = 4;

Dans ce cas, un conversion implicite de 4 est faite, car c'est un
smallint qui doit être testé dans un champ de type bigint.

# select * from toto where chiffre = '4';

Ici, on transmet tout de suite à l'optimiseur de requête que 4 est un
bigint, comme la colonne qui est testée. C'est un sujet de question
fréquent sur pgsql-general, sur le thème "Pourquoi est-ce que
l'optimiseur n'utilise pas mon index?", avec comme réponse "Parce qu'il
y a une conversion implicite qui empêche l'utilisation de l'index". Le
même effet s'obtient avec:

# select * from toto where chiffre = 4::bigint;

Dans le cas de la requête:

> # select 2 + '3';

je pense que les apostrophes ne changent rien du tout, puisque 2 est
pris pour un smallint et 3 converti implicitement en smallint.

Par contre, le requête suivante échoue:

latour=# select 2 + "3";
ERROR: Attribute "3" not found

comme quoi il n'y a pas de conversion implicite de la chaîne de
caractères.

A+

---------------
Francois

Home page: http://www.monpetitcoin.com/

"Les cons gagnent toujours. Ils sont trop." - Cavanna

In response to

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Francois Suter 2003-11-10 14:26:36 Re: Traduction PostgreSQL
Previous Message Patrick Welche 2003-11-10 13:56:52 Re: Rép