PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 10/05/2017 09:30:10

Gros bug de Postgresql

Bonjour,
Mon précédent post (grant execute sur des fonctions) reste sans réponse.

Alors que j'écris

create or replace function sync."insert_4newc_tblActions_data"(
         schema_name    varchar
        ,r              audit_history
        ) returns boolean as $$

PostgreSQL produit

CREATE OR REPLACE FUNCTION sync."insert_4newc_tblActions_data"(
    schema_name character varying,
    r public.audit_history)
  RETURNS boolean AS

C'est pas un bug ça ?

Merci pour votre attention et bonne journée

Hors ligne

#2 10/05/2017 09:56:16

rjuju
Administrateur

Re : Gros bug de Postgresql

Non.  Le type de chaque argument doit être connu, ce qui implique de préciser le schéma.

Hors ligne

#3 10/05/2017 10:16:13

Re : Gros bug de Postgresql

Je comprends bien.

Mais je dois appeler ces functions à partir de plusieurs usernames.

et

grant usage on schema public to generic_user;
grant all on public.audit_history to generic_user;

ne résoud pas le problème.

Je crains que le problème soit plus grave que vous semblez le penser...

Hors ligne

#4 10/05/2017 10:22:54

rjuju
Administrateur

Re : Gros bug de Postgresql

Je ne vois pas le rapport avec les droits.  Le message d'erreur dans votre précédent message était clair, vous ne passez pas le bon type. Concrètement lors de l'exécution de votre script audit_history != public.audit_history.

Hors ligne

#5 10/05/2017 10:25:00

Re : Gros bug de Postgresql

Je compile mes fonctions en tant que sync (ou owner de la db).
La compilation ajoute "public." devant "audit_history".
Comment dois-je alors faire pour pouvoir appeler mes fonctions avec  un autre user ?

Hors ligne

#6 10/05/2017 10:27:39

rjuju
Administrateur

Re : Gros bug de Postgresql

Vous devez préciser le schéma ou configurer le search_path ( http://docs.postgresql.fr/9.6/ddl-schemas.html )

Hors ligne

#7 10/05/2017 11:08:40

Re : Gros bug de Postgresql

je précise le schema et j'obtiens

ERROR:  function sync.insert_handler(character varying, audit_history) does not exist
LINE 1: SELECT sync.insert_handler(sync_schema_name, r)
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
QUERY:  SELECT sync.insert_handler(sync_schema_name, r)
CONTEXT:  PL/pgSQL function sync.tablet2server(character varying) line 54 at PERFORM

alors que j'éxécute les fonctions avec le même user qui les a créées !?!!

Je pense que c'est un problème de droits car ça marchait avant. Pourriez-vous jeter un oeil sur mon post précédent?

Hors ligne

#8 10/05/2017 11:12:02

rjuju
Administrateur

Re : Gros bug de Postgresql

Au cas où ce n'était pas clair, je voulais dire préciser le schéma sur l'argument qui pose soucis...

Hors ligne

#9 10/05/2017 11:15:47

Re : Gros bug de Postgresql

C'est ce que j'ai fait (pour chaque fonction) :

create or replace function sync."insert_4newc_tblContacts_data"(
         schema_name    varchar
        ,r              public.audit_history
) returns void as $$

Hors ligne

#10 10/05/2017 11:23:38

rjuju
Administrateur

Re : Gros bug de Postgresql

À l'appel de cette fonction...


Avez-vous lu le message d'erreur ?

ERROR:  function sync.insert_handler(character varying, audit_history) does not exist
LINE 1: SELECT sync.insert_handler(sync_schema_name, r)
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

r n'est pas de type public.audit_history

Hors ligne

#11 10/05/2017 11:30:35

Re : Gros bug de Postgresql

voici la définition de la fonction :

create or replace function sync.insert_handler(
         schema_name    varchar
        ,r              public.audit_history
) returns void as $$

et son appel :

declare
        r               public.audit_history;
...
case r.operation

                        when 'INSERT' then perform sync.insert_handler(sync_schema_name, r);

Où ai-je pêché ?

Hors ligne

#12 10/05/2017 11:45:20

Re : Gros bug de Postgresql

je ne crois pas que nous pourrons résoudre ce problème si vous n'examinez pas mon système de a à z

ce qui est bien sûr impossible

je vous remercie (très sincérement) pour votre attention

je vais continuer tout seul

si je trouve une solution intéressante, je vous le ferai savoir

merci et bonne journée

Hors ligne

#13 10/05/2017 16:54:55

Re : Gros bug de Postgresql

j'ai droppé la db
et je l'ai recréée from the scratch

et ça marche... avec la syntaxe de mon dernier post.

Bonne soirée

Hors ligne

Pied de page des forums