Lists: | pgsql-fr-generale |
---|
From: | "Delorme, Yann" <Yann(dot)Delorme(at)esker(dot)fr> |
---|---|
To: | "pgsql-fr-generale(at)postgresql(dot)org" <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Problème pour surcharger la fonction substring |
Date: | 2011-04-20 09:27:43 |
Message-ID: | 2EC1B00CE313174181AF54B27A31350F17C9DCF067@ly-exch2007 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
POSTGRE 9.0.3 et POSTGRE 9.0.4
Bonjour
Je cherche à surcharger la fonction substring pour quelle fonctionne avec les dates et les time stamps.
Je migre une application existante et pour l'instant je ne peux pas faire autrement, car le code doit fonctionner sur 2 SGDB différents.
J'ai défini la fonction suivante :
-- Function: "substring"(timestamp without time zone, integer, integer)
-- DROP FUNCTION "substring"(timestamp without time zone, integer, integer);
CREATE OR REPLACE FUNCTION "substring"(timestamp without time zone, integer, integer)
RETURNS text AS
'select pg_catalog.substring($1::text, $2, $3)'
LANGUAGE sql IMMUTABLE STRICT
COST 1;
ALTER FUNCTION "substring"(timestamp without time zone, integer, integer) OWNER TO postgres;
Mais pour appeler ma fonction je suis obligé le préfixer l'appel par public. Sinon j'ai l'erreur suivante :
ERROR: function pg_catalog.substring(timestamp without time zone, integer, integer) does not exist
LINE 1: select substring(sub_date_time, 1, 7), sub_date_time from "D...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
********** Erreur **********
ERROR: function pg_catalog.substring(timestamp without time zone, integer, integer) does not exist
État SQL :42883
Astuce : No function matches the given name and argument types. You might need to add explicit type casts.
Caractère : 8
J'ai modifié le searchpath
SET search_path TO public,pg_catalog
Mais cela ne change rien.
Auriez-vous une idée pour que mon select fonctionne sans préfixer l'appel par public ?
Cordialement.
Yann.
Yann Delorme
Senior Software Engineer / Senior Software Engineer
Esker SA
Tél : +33 (0)4 72 83 46 46
Fax : + 33 (0)4 72 83 46 40
Yann(dot)Delorme(at)esker(dot)fr<mailto:Yann(dot)Delorme(at)esker(dot)fr>
www.esker.fr<http://www.esker.fr/> ? www.flydoc.fr<http://www.flydoc.fr/>
CONFIDENTIALITE : Ce message et les éventuelles pièces jointes sont confidentiels. Si vous n'êtes pas dans la liste des destinataires, veuillez informer l'expéditeur immédiatement et ne pas divulguer le contenu à une tierce personne. Les idées et opinions présentées dans ce message sont celles de son auteur, et ne représentent pas nécessairement celles de la société. Par ailleurs et malgré toutes les précautions prises pour éviter la présence de virus dans nos envois, nous vous recommandons de prendre, de votre côté, les mesures permettant d'assurer la non-introduction de virus dans votre système informatique. La société ne saurait être tenue pour responsable de tout dommage causé par la présence d'un virus dans ce message.
__________
From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | "Delorme, Yann" <Yann(dot)Delorme(at)esker(dot)fr> |
Cc: | "pgsql-fr-generale(at)postgresql(dot)org" <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Re: Problème pour surcharger la fonction substring |
Date: | 2011-04-20 10:07:03 |
Message-ID: | 4DAEB047.9000201@lelarge.info |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le 20/04/2011 11:27, Delorme, Yann a écrit :
> POSTGRE 9.0.3 et POSTGRE 9.0.4
>
> Bonjour
>
> Je cherche à surcharger la fonction substring pour quelle fonctionne avec les dates et les time stamps.
> Je migre une application existante et pour l'instant je ne peux pas faire autrement, car le code doit fonctionner sur 2 SGDB différents.
>
> J'ai défini la fonction suivante :
>
> -- Function: "substring"(timestamp without time zone, integer, integer)
>
> -- DROP FUNCTION "substring"(timestamp without time zone, integer, integer);
>
> CREATE OR REPLACE FUNCTION "substring"(timestamp without time zone, integer, integer)
> RETURNS text AS
> 'select pg_catalog.substring($1::text, $2, $3)'
> LANGUAGE sql IMMUTABLE STRICT
> COST 1;
> ALTER FUNCTION "substring"(timestamp without time zone, integer, integer) OWNER TO postgres;
>
>
> Mais pour appeler ma fonction je suis obligé le préfixer l'appel par public. Sinon j'ai l'erreur suivante :
>
>
> ERROR: function pg_catalog.substring(timestamp without time zone, integer, integer) does not exist
> LINE 1: select substring(sub_date_time, 1, 7), sub_date_time from "D...
> ^
> HINT: No function matches the given name and argument types. You might need to add explicit type casts.
>
> ********** Erreur **********
>
> ERROR: function pg_catalog.substring(timestamp without time zone, integer, integer) does not exist
> État SQL :42883
> Astuce : No function matches the given name and argument types. You might need to add explicit type casts.
> Caractère : 8
>
> J'ai modifié le searchpath
> SET search_path TO public,pg_catalog
>
> Mais cela ne change rien.
>
> Auriez-vous une idée pour que mon select fonctionne sans préfixer l'appel par public ?
>
À ma connaissance, pg_catalog est toujours inclus en premier. Donc, non,
pas moyen de faire sans préfixer par le schéma. La raison en est que ça
ouvrirait une grosse brèche de sécurité dans le cas contraire.
--
Guillaume
http://www.postgresql.fr
http://dalibo.com
From: | "Delorme, Yann" <Yann(dot)Delorme(at)esker(dot)fr> |
---|---|
To: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
Cc: | "pgsql-fr-generale(at)postgresql(dot)org" <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | RE: Problème pour surcharger la fonction substring |
Date: | 2011-04-20 12:04:43 |
Message-ID: | PostgreSQL : Re : Problème 토토 사이트 순위 Surcharger LA Fon |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour
Poutant la doc semble claire.
18.10.1. Comportement des instructions
Le schéma du catalogue système, pg_catalog, est toujours parcouru, qu'il soit ou non mentionné dans le chemin. Mentionné,
il est alors parcouru dans l'ordre indiqué. Dans le cas contraire, il est parcouru avant tout autre élément du chemin.
Yann.
Yann Delorme
Senior Software Engineer / Senior Software Engineer
Esker SA
Tél : +33 (0)4 72 83 46 46
Fax : + 33 (0)4 72 83 46 40
mailto:Yann(dot)Delorme(at)esker(dot)fr
http://www.esker.fr/ ¦ http://www.flydoc.fr/
CONFIDENTIALITE : Ce message et les éventuelles pièces jointes sont confidentiels. Si vous n'êtes pas dans la liste des destinataires, veuillez informer l'expéditeur immédiatement et ne pas divulguer le contenu à une tierce personne. Les idées et opinions présentées dans ce message sont celles de son auteur, et ne représentent pas nécessairement celles de la société. Par ailleurs et malgré toutes les précautions prises pour éviter la présence de virus dans nos envois, nous vous recommandons de prendre, de votre côté, les mesures permettant d'assurer la non-introduction de virus dans votre système informatique. La société ne saurait être tenue pour responsable de tout dommage causé par la présence d'un virus dans ce message.
__________
-----Message d'origine-----
De : Guillaume Lelarge [mailto:guillaume(at)lelarge(dot)info]
Envoyé : mercredi 20 avril 2011 12:07
À : Delorme, Yann
Cc : pgsql-fr-generale(at)postgresql(dot)org
Objet : Re: [pgsql-fr-generale] Problème pour surcharger la fonction substring
Le 20/04/2011 11:27, Delorme, Yann a écrit :
> POSTGRE 9.0.3 et POSTGRE 9.0.4
>
> Bonjour
>
> Je cherche à surcharger la fonction substring pour quelle fonctionne avec les dates et les time stamps.
> Je migre une application existante et pour l'instant je ne peux pas faire autrement, car le code doit fonctionner sur 2 SGDB différents.
>
> J'ai défini la fonction suivante :
>
> -- Function: "substring"(timestamp without time zone, integer,
> integer)
>
> -- DROP FUNCTION "substring"(timestamp without time zone, integer,
> integer);
>
> CREATE OR REPLACE FUNCTION "substring"(timestamp without time zone, integer, integer)
> RETURNS text AS
> 'select pg_catalog.substring($1::text, $2, $3)'
> LANGUAGE sql IMMUTABLE STRICT
> COST 1;
> ALTER FUNCTION "substring"(timestamp without time zone, integer,
> integer) OWNER TO postgres;
>
>
> Mais pour appeler ma fonction je suis obligé le préfixer l'appel par public. Sinon j'ai l'erreur suivante :
>
>
> ERROR: function pg_catalog.substring(timestamp without time zone,
> integer, integer) does not exist LINE 1: select substring(sub_date_time, 1, 7), sub_date_time from "D...
> ^
> HINT: No function matches the given name and argument types. You might need to add explicit type casts.
>
> ********** Erreur **********
>
> ERROR: function pg_catalog.substring(timestamp without time zone,
> integer, integer) does not exist État SQL :42883 Astuce : No function
> matches the given name and argument types. You might need to add explicit type casts.
> Caractère : 8
>
> J'ai modifié le searchpath
> SET search_path TO public,pg_catalog
>
> Mais cela ne change rien.
>
> Auriez-vous une idée pour que mon select fonctionne sans préfixer l'appel par public ?
>
À ma connaissance, pg_catalog est toujours inclus en premier. Donc, non, pas moyen de faire sans préfixer par le schéma. La raison en est que ça ouvrirait une grosse brèche de sécurité dans le cas contraire.
--
Guillaume
http://www.postgresql.fr
http://dalibo.com
From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | "Delorme, Yann" <Yann(dot)Delorme(at)esker(dot)fr> |
Cc: | "pgsql-fr-generale(at)postgresql(dot)org" <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Re: Problème pour surcharger la fonction substring |
Date: | 2011-04-20 12:36:54 |
Message-ID: | 4DAED366.7090107@lelarge.info |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le 20/04/2011 14:04, Delorme, Yann a écrit :
> [...]
> Poutant la doc semble claire.
>
> 18.10.1. Comportement des instructions
>
> Le schéma du catalogue système, pg_catalog, est toujours parcouru, qu'il soit ou non mentionné dans le chemin. Mentionné,
> il est alors parcouru dans l'ordre indiqué. Dans le cas contraire, il est parcouru avant tout autre élément du chemin.
>
En effet, erreur de ma part :)
J'ai essayé avec substring, j'ai le même problème que vous. Ça
fonctionne pourtant avec une procédure comme version().
--
Guillaume
http://www.postgresql.fr
http://dalibo.com
From: | Marc Cousin <cousinmarc(at)gmail(dot)com> |
---|---|
To: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
Cc: | "Delorme, Yann" <Yann(dot)Delorme(at)esker(dot)fr>, "pgsql-fr-generale(at)postgresql(dot)org" <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Re: Problème pour surcharger la fonction substring |
Date: | 2011-04-20 12:42:13 |
Message-ID: | 1303303334.7209.15.camel@marco-dalibo |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le mercredi 20 avril 2011 à 14:36 +0200, Guillaume Lelarge a écrit :
> Le 20/04/2011 14:04, Delorme, Yann a écrit :
> > [...]
> > Poutant la doc semble claire.
> >
> > 18.10.1. Comportement des instructions
> >
> > Le schéma du catalogue système, pg_catalog, est toujours parcouru, qu'il soit ou non mentionné dans le chemin. Mentionné,
> > il est alors parcouru dans l'ordre indiqué. Dans le cas contraire, il est parcouru avant tout autre élément du chemin.
> >
>
> En effet, erreur de ma part :)
>
> J'ai essayé avec substring, j'ai le même problème que vous. Ça
> fonctionne pourtant avec une procédure comme version().
>
En fait substring, c'est un des cas un peu à part dans le monde des
fonctions, parce que c'est une de celles qui ont potentiellement une
syntaxe «à la con»:
substring(A FROM B FOR C) ou substring (A,B,C).
Ce qui lui vaut d'être traitée comme un cas particulier par l'analyseur
SQL (la grammaire bison). Qui pointe en dur vers la fonction du même
type dans le catalogue pg_catalog. Conclusion, ça marche avec à peu près
n'importe quelle fonction (même système), sauf ces cas particuliers :)
Avec version, évidemment, qui a une syntaxe propre, ça passe tout seul.
From: | Cédric Villemain <cedric(dot)villemain(dot)debian(at)gmail(dot)com> |
---|---|
To: | Marc Cousin <cousinmarc(at)gmail(dot)com> |
Cc: | Guillaume Lelarge <guillaume(at)lelarge(dot)info>, "Delorme, Yann" <Yann(dot)Delorme(at)esker(dot)fr>, "pgsql-fr-generale(at)postgresql(dot)org" <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Re: [pgsql-fr-generale] Problème pour surcharger la fonction substring |
Date: | 2011-04-20 14:06:05 |
Message-ID: | BANLkTikJfEon9+OU3A5-6wXQ4ab1KUnNSw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le 20 avril 2011 14:42, Marc Cousin <cousinmarc(at)gmail(dot)com> a écrit :
> Le mercredi 20 avril 2011 à 14:36 +0200, Guillaume Lelarge a écrit :
>> Le 20/04/2011 14:04, Delorme, Yann a écrit :
>> > [...]
>> > Poutant la doc semble claire.
>> >
>> > 18.10.1. Comportement des instructions
>> >
>> > Le schéma du catalogue système, pg_catalog, est toujours parcouru, qu'il soit ou non mentionné dans le chemin. Mentionné,
>> > il est alors parcouru dans l'ordre indiqué. Dans le cas contraire, il est parcouru avant tout autre élément du chemin.
>> >
>>
>> En effet, erreur de ma part :)
>>
>> J'ai essayé avec substring, j'ai le même problème que vous. Ça
>> fonctionne pourtant avec une procédure comme version().
>>
>
> En fait substring, c'est un des cas un peu à part dans le monde des
> fonctions, parce que c'est une de celles qui ont potentiellement une
> syntaxe «à la con»:
> substring(A FROM B FOR C) ou substring (A,B,C).
>
> Ce qui lui vaut d'être traitée comme un cas particulier par l'analyseur
> SQL (la grammaire bison). Qui pointe en dur vers la fonction du même
> type dans le catalogue pg_catalog. Conclusion, ça marche avec à peu près
> n'importe quelle fonction (même système), sauf ces cas particuliers :)
> Avec version, évidemment, qui a une syntaxe propre, ça passe tout seul.
Subtilité numéro 2: (protection du nom de la fonction)
cedric=# select "substring"(now()::timestamp without time zone,1,7);
substring
-----------
2011-04
(1 ligne)
cedric=# select "substring"('now()::timestamp without time zone',1,7);
substring
-----------
now()::
(1 ligne)
--
Cédric Villemain 2ndQuadrant
http://2ndQuadrant.fr/ PostgreSQL : Expertise, Formation et Support