Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[PL/pgsql] Différence entre '=' et ':='

5 réponses
Avatar
JKB
Bonjour à tous,

Je suis en train d'essayer d'optimiser une requête (postgis) qui
prend plusieurs semaines de temps CPU... Je suis tombé sur un truc
bizarre qui apparaît plusieurs fois dans les fonctions PL/pgsql :

pre = '';

pre est ici déclaré comme un varchar. Le problème est simple : les
affectations sont censées être faites à l'aide de l'opérateur ':='.
Pourquoi certaines sont-elles faites à l'aide de '=' et non ':=' ?
Quelle est la subtile différence entre les deux notations ?

Je suis un peu perdu parce que ni le site officiel de pgsql, ni
l'ouvrage de référence que j'ai devant moi, ni même Google ne parle
d'affectation à l'aide du seul signe '='. Pourtant, en tant que
telle, la fonction tourne et le serveur ne se plaint pas...

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.

5 réponses

Avatar
Sebastien Lardiere
JKB a écrit :
Bonjour à tous,

Je suis en train d'essayer d'optimiser une requête (postgis) qui
prend plusieurs semaines de temps CPU... Je suis tombé sur un truc
bizarre qui apparaît plusieurs fois dans les fonctions PL/pgsql :

pre = '';

pre est ici déclaré comme un varchar. Le problème est simple : les
affectations sont censées être faites à l'aide de l'opérateur ':='.
Pourquoi certaines sont-elles faites à l'aide de '=' et non ':=' ?
Quelle est la subtile différence entre les deux notations ?

Je suis un peu perdu parce que ni le site officiel de pgsql, ni
l'ouvrage de référence que j'ai devant moi, ni même Google ne parle
d'affectation à l'aide du seul signe '='. Pourtant, en tant que
telle, la fonction tourne et le serveur ne se plaint pas...




Bonjour,

C'est la même chose.

En fait, plpgsql fait un select pour réaliser l'affectation ( select pre
= '' ).

Les opérateurs = et := sont analysés de la même façon, voir
src/pl/plpgsql/src/scan.l dans les sources de PostgreSQL.

Je ne vois donc pas de matiere à optimiser ici.

Cordialement,

--
Sébastien
Avatar
JKB
Le 28-02-2008, à propos de
Re: [PL/pgsql] Différence entre '=' et ':=',
Sebastien Lardiere écrivait dans fr.comp.applications.sgbd :
JKB a écrit :
Bonjour à tous,

Je suis en train d'essayer d'optimiser une requête (postgis) qui
prend plusieurs semaines de temps CPU... Je suis tombé sur un truc
bizarre qui apparaît plusieurs fois dans les fonctions PL/pgsql :

pre = '';

pre est ici déclaré comme un varchar. Le problème est simple : les
affectations sont censées être faites à l'aide de l'opérateur ':='.
Pourquoi certaines sont-elles faites à l'aide de '=' et non ':=' ?
Quelle est la subtile différence entre les deux notations ?

Je suis un peu perdu parce que ni le site officiel de pgsql, ni
l'ouvrage de référence que j'ai devant moi, ni même Google ne parle
d'affectation à l'aide du seul signe '='. Pourtant, en tant que
telle, la fonction tourne et le serveur ne se plaint pas...




Bonjour,

C'est la même chose.

En fait, plpgsql fait un select pour réaliser l'affectation ( select pre
= '' ).

Les opérateurs = et := sont analysés de la même façon, voir
src/pl/plpgsql/src/scan.l dans les sources de PostgreSQL.

Je ne vois donc pas de matiere à optimiser ici.



Disons que pour optimiser un bout de code, il vaut mieux le
comprendre et si le type qui a programmé ces fonctions a utilisé de
temps en temps '=' et de temps en temps ':=', il y avait pour moi
une différence entre les deux. Si c'est la même chose, cela
simplifie mon problème. Par contre, il est un peu dommageable que
cela ne figure pas dans les doc où il est indiqué plusieurs fois
qu'il faut _toujours_ utiliser ':='...

Merci,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
William Marie
"JKB" a écrit dans le message de news:


Disons que pour optimiser un bout de code, il vaut mieux le
comprendre et si le type qui a programmé ces fonctions a utilisé de
temps en temps '=' et de temps en temps ':=', il y avait pour moi
une différence entre les deux. Si c'est la même chose, cela
simplifie mon problème. Par contre, il est un peu dommageable que
cela ne figure pas dans les doc où il est indiqué plusieurs fois
qu'il faut _toujours_ utiliser ':='...



Si ma mémoire est bonne l'opérateur ':=' est l'opérateur d'affectation en
Pascal et '=' l'opérateur (booléen) d'égalité. Alors que c'est
respectivement '=' et '==' en C. C'est bien ça ?
--
=================================== William Marie
Attention antiSpam remplacer trapellun.invalid
par free.fr
Web : http://wmarie.free.fr
http://www.pandemonium.dnsalias.org (site expérimental)
====================================
Avatar
JKB
Le 28-02-2008, à propos de
Re: [PL/pgsql] Différence entre '=' et ':=',
William Marie écrivait dans fr.comp.applications.sgbd :
"JKB" a écrit dans le message de news:


Disons que pour optimiser un bout de code, il vaut mieux le
comprendre et si le type qui a programmé ces fonctions a utilisé de
temps en temps '=' et de temps en temps ':=', il y avait pour moi
une différence entre les deux. Si c'est la même chose, cela
simplifie mon problème. Par contre, il est un peu dommageable que
cela ne figure pas dans les doc où il est indiqué plusieurs fois
qu'il faut _toujours_ utiliser ':='...



Si ma mémoire est bonne l'opérateur ':=' est l'opérateur d'affectation en
Pascal et '=' l'opérateur (booléen) d'égalité. Alors que c'est
respectivement '=' et '==' en C. C'est bien ça ?



Oui, et ? ;-)

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
William Marie
"JKB" a écrit dans le message de news:


Oui, et ? ;-)



Peut-être que le codeur de pgsql est un nostalgique du Pascal (jeunesse
!)
--
=================================== William Marie
Attention antiSpam remplacer trapellun.invalid
par free.fr
Web : http://wmarie.free.fr
http://www.pandemonium.dnsalias.org (site expérimental)
====================================