Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#76 Re : PL/pgSQL » Wildcards dans un case when » 09/06/2017 11:55:49
Ok ! Merci !
#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 SubCe 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 PERFORMalors 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 ASC'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 danielEt 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 ?
#95 Re : PL/pgSQL » grant all on all objects of a schema to all users » 05/05/2017 10:03:14
merci et bon bon week-end
#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.