2017-08-11 5 views
1

J'ai activé la journalisation des instructions SQL dans PostgreSQL version 9.2. Il a commencé à écrire des déclarations de journaux comme celui-ci:Obtenir une requête exécutable à partir du journal postgres

LOG: exécuter: qrz_TRIGGERS UPDATE SET JOB_NAME = 1 $, JOB_GROUP = $ 2, is_volatil = $ 3, DESCRIPTION = 4 $, NEXT_FIRE_TIME = 5 $, PREV_FIRE_TIME = $ 6, TRIGGER_STATE = 7 $, TRIGGER_TYPE = $ 8, START_TIME = $ 9, END_TIME = 10 $, CALENDAR_NAME = 11 $, MISFIRE_INSTR = 12 $, Priorité = $ OU nom_trigger = 14 $ et TRIGGER_GROUP = 15 $

détail: paramètres: $ 1 = 'dssSchedulerJob' , $ 2 = 'DEFAUT', $ 3 = 'f', $ 4> = NULL, $ 5 = '1501855865730', $ 6 = '1501855855730', 7 $ = 'BLOQUÉ', 8 $ = 'SIMPLE', 9 $ = '1252939835730', 10 $ = '0', 11 $ = NULL, 12 $ = '0', 13 $ = '5', $ 14 = 'dssTrigger', $ 15 = 'DEFAULT'

Je voudrais prendre ce SQL et le lancer avec l'analyse dans pgAdmin3 par exemple.

Est-ce que quelqu'un sait comment activer Postgres pour différencier les entiers et les chaînes. Ou mieux entre les paramètres qui ont besoin de citations et ceux qui ne le font pas.

Il est très compliqué de prendre les paramètres et de les placer au bon endroit dans le SQL. Également écrire un outil simple pour aider est impossible ou très difficile parce qu'il ne sait pas si les citations sont nécessaires ou non.

Merci.

Répondre

0

comme vous pouvez voir toutes les valeurs mais null sont ici entre guillemets simples. vous pouvez les transmettre à la déclaration préparée comme ils sont fournis ici. Un court exemple:

t=# prepare a(int) as (select $1/2); 
PREPARE 
t=# execute a('4'); 
?column? 
---------- 
     2 
(1 row) 

t=# execute a('32'); 
?column? 
---------- 
     16 
(1 row) 

afin que vous puissiez utiliser LOG: execute partie, qui est de préparer et d'analyser la déclaration DETAIL: parameters: à utiliser comme arguments pour la déclaration

+0

Cela signifie que je peux utiliser les valeurs avec des guillemets, n'a pas d'importance si ce sont des chaînes ou des valeurs int? –

+0

il y a un "cast par défaut" de nombre entier comme texte à nombre entier, donc il ne permettra pas que "99a" soit passé en entier, mais "99" le permettra. –