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

#77 PL/pgSQL » Wildcards dans un case when » 09/06/2017 10:13:14

Michel Depiesse
Réponses : 2

Bonjour,

Je dois écrire pour 20 tables :

when 'tblContactCategory01_data' then 
			stmt := stmt || ' audit_id = $1';
			execute stmt using old.audit_id;

J'ai essayé :

when 'tblContactCategory%_data' then 

mais ça ne marche pas.

Y a-t-il moyen d'éviter d'écrire vingt fois (presque) la même chose ?

Merci

#78 Re : PSQL » \copy sur linux et sur windows » 12/05/2017 14:52:23

Résolu !

Set export_csv_file = fso.CreateTextFile(path4csv & "export_csv.sql", True, False)
au lieu de
Set export_csv_file = fso.CreateTextFile(path4csv & "export_csv.sql", True, True)
Sinon, le fichier était en UNICODE

Merci et bon week-end.

#79 Re : PSQL » \copy sur linux et sur windows » 12/05/2017 14:20:16

Merci pour votre réponse

C'est un script que j'ai généré par un script en VBA :

Option Compare Database
Private Sub sync_local_data_to_server_Click()
    Dim rs As DAO.Recordset
    Dim fso As Object
    Dim date_today As String
    Dim path4csv As String
    Dim path4psql As String
    Dim export_csv_file As Object
    Dim stmt As String
    Dim hProcess As Long
    Dim user2sync As String
     
    path4csv = "D:\Users\Ariel\sync\files2send\"
    path4psql = "C:\Programs\PostgreSQL\9.5\bin\"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    user2sync = Forms("send_sync2server")!user2sync
    
    '
    ' delete old export_csv.sql
    '
    With fso
        If .FileExists(path4csv & "export_csv.sql") Then
            .DeleteFile path4csv & "export_csv.sql"
        End If
    End With
    
    '
    ' create new export_csv.sql
    '
    Set export_csv_file = fso.CreateTextFile(path4csv & "export_csv.sql", True, True)
         
    '
    ' write line for audit_history
    '
    stmt = "\copy (select table_name, operation, audit_id, user_name, audit_date, sync_status from public.audit_history) to '" _
                & path4csv _
                & "audit_history.csv' with csv header;"
                
    export_csv_file.WriteLine stmt
    export_csv_file.WriteLine ""
            
    '
    ' write lines for tables
    '
    Set rs = CurrentDb.OpenRecordset("select distinct table_name from audit_history")
                
    If Not (rs.EOF And rs.BOF) Then
    
        rs.MoveFirst
        
        Do Until rs.EOF = True
            
            stmt = "\copy (select * from " _
                    & Chr(34) _
                    & rs!table_name _
                    & Chr(34) _
                    & " ) where audit_id in (select audit_id from public.audit_history where table_name = " _
                    & "'" _
                    & rs!table_name _
                    & "'" _
                    & ")) to '" _
                    & path4csv _
                    & rs!table_name _
                    & ".csv' with csv header;"
                    
            export_csv_file.WriteLine stmt
            export_csv_file.WriteLine ""
              
            rs.MoveNext
            
        Loop
    
    End If
    
    export_csv_file.Close
        
    '
    ' call pg to run to export_csv.sql
    '
    stmt = Chr(34) & path4psql & "psql -U rubin " & " -f " & path4csv & "export_csv.sql" & " contacts" & Chr(34)
    MsgBox (stmt)
    hProcess = Shell(stmt, vbNormalFocus)
    
    
    MsgBox ("Sync files produced")
    '
    ' send the csv's to pg server
    '
    'fso.CopyFile path4csv & "*.csv", "\\192.168.1.160\sync\" & user2sync & "\"
    
    fso.CopyFile path4csv & "*.csv", "Z:\" & user2sync & "\"
    
End Sub

Ce qui est étonnant, c'est que les commandes qui sont dans le fichier, je peux les exécuter en les copy/paste dans psql. Mais elles donnent un message d'horreur quand je cherche à les exécuter par -f export_csv.sql ou \i export_csv.sql.
J'en perds mon latin

#80 PSQL » \copy sur linux et sur windows » 12/05/2017 12:42:00

Michel Depiesse
Réponses : 3

Bonjour;

J'ai un script export_csv.sql qui contient des commandes \copy ... afin de produire des csv.

Quand je joue ce script sur Linux, tout va bien.

Mais quand je le joue sur Windows; je reçois le message :

psql:export_csv.sql:1: invalid command : \
psql:export_csv.sql:1: ERROR : syntax error at or near "y_"
LINE 1: "y_"

Il s'agit d'un y avec deux points dessus.

Mais si je copy/paste la ligne du fichier sql en psql, la commande s'éxecute sans problème.

Que faire ?

Merci pour votre attention

#81 Re : PL/pgSQL » Gros bug de Postgresql » 10/05/2017 16:54:55

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

#82 Re : PL/pgSQL » Gros bug de Postgresql » 10/05/2017 11:45:20

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

#83 Re : PL/pgSQL » Gros bug de Postgresql » 10/05/2017 11:30:35

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é ?

#84 Re : PL/pgSQL » Gros bug de Postgresql » 10/05/2017 11:15:47

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 $$

#85 Re : PL/pgSQL » Gros bug de Postgresql » 10/05/2017 11:08:40

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?

#86 Re : PL/pgSQL » Gros bug de Postgresql » 10/05/2017 10:25:00

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 ?

#87 Re : PL/pgSQL » Gros bug de Postgresql » 10/05/2017 10:16:13

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...

#88 PL/pgSQL » Gros bug de Postgresql » 10/05/2017 09:30:10

Michel Depiesse
Réponses : 12

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

#89 PL/pgSQL » grant execute sur des fonctions » 08/05/2017 09:43:16

Michel Depiesse
Réponses : 0

Bonjour,

J'ai des fonctions compilées avec -U sync dans un schéma sync.

Pour ces fonctions, j'ai fait :

grant usage on schema sync to generic_user with grant option;

revoke all privileges on all tables in schema sync from generic_user;
grant all privileges on all tables in schema sync to generic_user with grant option;

revoke all privileges on all sequences in schema sync from generic_user;
grant all privileges on all sequences in schema sync to generic_user with grant option;

grant execute on all functions in schema sync to generic_user with grant option;

Et en pgadmin3, je vois que les fonctions ont un grant execute pour generic_user.

Je joue un script qui appelle ces fonctions et je reçois un message

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

pour toutes les fonctions ayant un argument de la forme "public.nom_de_table" comme

CREATE OR REPLACE FUNCTION sync.update_handler(
    schema_name character varying,
    r public.audit_history)

Par contre, les autres fonctions sont reconnues sans problèmes.

J'ai fait

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

mais ça ne change rien.

Que faire ?
Merci pour votre attention

#90 Re : PL/pgSQL » grant (suite) » 05/05/2017 14:21:31

La fonction vu dans pgadmin3 :

CREATE OR REPLACE FUNCTION sync.update_handler(
    schema_name character varying,
    r public.audit_history)

Pourquoi public ? Les fonctions sans cette variable, je peux les appeler à partit de l'user daniel. C'est sans doute ce qui crée le problème...

#91 Re : PL/pgSQL » grant (suite) » 05/05/2017 14:14:57

Bon... Je suis un cran plus loin.

Maintenant, un script lancé avec -U daniel me donne:

ERROR:  function sync.update_handler(character varying, audit_history) does not exist
LINE 1: SELECT sync.update_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.update_handler(sync_schema_name, r.*)

Alors que, pgadmin me dit, que cette fonction du schema sync a été grantée à generic user (avec grant option) et generic_user a été granté à daniel.
Je pédale dans la choucroute...

#92 Re : PL/pgSQL » grant (suite) » 05/05/2017 11:28:34

Si je comprends bien :

revoke all privileges on all tables in schema sync from generic_user;
grant all privileges on all tables in schema sync to generic_user with grant option;

grant usage on schema sync to generic_user with grant option;

Vous ai-je bien compris ?

Merci

#93 Re : PL/pgSQL » grant all on all objects of a schema to all users » 05/05/2017 11:17:22

Merci Sebastien.

Pourriez-vous jeter un oeil sur mon post "grant (suite)"

Merci et bon week-end

#94 PL/pgSQL » grant (suite) » 05/05/2017 11:04:11

Michel Depiesse
Réponses : 4

Bonjour,

Je fais :

revoke all privileges on all tables in schema sync from generic_user;
grant all privileges on all tables in schema sync to generic_user with grant option;

Dans le passé, j'avais fait

grant generic user to daniel

Et quand, je fais

psql dev_contacts_server daniel
delete from sync.log;

Je reçois

ERROR:  permission denied for schema sync
LINE 1: delete from sync.log;

Je ne comprends pas... Que faire ?

#96 PL/pgSQL » grant all on all objects of a schema to all users » 04/05/2017 15:54:12

Michel Depiesse
Réponses : 4

Bonjour,

J'ai un schéma du nom de sync dont le owner est sync.

Il y a trois tables et 170 fonctions.

Je voudrais donner un grant execute sur toutes les fonctions et un grant select, insert, update pour toutes les tables (et sequences)  à tous les users (une vingtaine).

J'ai essayé plusieurs instructions mais aucune ne fonctionne.

Pouvez-vous me donner une indication.

Merci

#97 Re : PSQL » \copy avec des boolean » 26/04/2017 17:07:44

génial !

vous méritez le nom que vous avez !

merci !

#98 Re : PSQL » \copy avec des boolean » 26/04/2017 14:34:55

j'ai trouvé !

je ne pointais pas vers le bon schema...

Mille excuses

Dalibo devrait se présenter aux présidentielles

ça nous changerait des nullards habituels

bonne journée

#99 Re : PSQL » \copy avec des boolean » 26/04/2017 14:17:12

Mea culpa. Credit = 0 dans le csv. J'ai importé le csv dans une feuille calc...

#100 Re : PSQL » \copy avec des boolean » 26/04/2017 14:04:40

Encore merci.

J'ai fait le \d sur les deux dbs. Les tables sont identiques (les deux db viennent du restore de la même db).

Je ne vois comment vous voyez que crédit = 0 dans la ligne csv.

Pied de page des forums

Propulsé par FluxBB