2010-06-02 2 views
5

Dans SQL Server, je pouvais copier le code sql d'une application et le coller dans SSMS, déclarer & affecter des variables qui existent dans sql et exécuter. yay grand scénario de débogage.Déboguer SQL dans pgAdmin lorsque SQL contient des variables

E.g. (S'il vous plaît noter que je suis rouillé et la syntaxe peut être incorrecte):

declare @x as varchar(10) 
set @x = 'abc' 
select * from sometable where somefield = @x 

Je veux faire quelque chose de similaire avec Postgres dans pgAdmin (ou un autre outil postgres, des recommandations?) Où je peux déposer mon SQL (params & tous) dans quelque chose qui fonctionnera contre Postgres DB.

Je réalise que vous pouvez créer pgscript, mais cela ne semble pas être très bon, par exemple, si je fais l'équivalent de ci-dessus, il ne met pas les guillemets simples autour de la valeur dans @x, ni il me laisse en les doublant et vous ne recevez pas une table après - seulement le texte ...

Actuellement j'ai un morceau de SQL quelqu'un a écrit qui a 3 variables uniques dedans qui sont utilisées environ 6 fois chaque ...

Donc la question est de savoir comment les autres personnes déboguent SQL efficacement, de préférence d'une manière similaire à mes jours SQL Server.

+0

Je voulais ajouter cela comme une demande de fonctionnalité, mais je ne pouvais pas car je ne suis pas assez old school pour savoir comment fonctionnent les listes de diffusion pgAdmin :( –

Répondre

1

Vous pouvez y parvenir en utilisant les commandes PREPARE, EXECUTE, DEALLOCATE pour gérer les instructions, ce dont nous parlons ici.

Par exemple:

PREPARE test AS SELECT * FROM users WHERE first_name = $1; 
EXECUTE test ('paul'); 
DEALLOCATE test; 

Peut-être pas aussi graphique que certains peuvent aimer, mais certainement réalisable.

+0

Je supprime ma réponse suggérant d'utiliser un serveur lié de sql! Merci, dommage qu'ils ne puissent pas être nommés. –

1

Je voudrais essayer d'écrire un SQL function qui enveloppe votre requête. Il peut être quelque chose d'aussi simple que

CREATE OR REPLACE FUNCTION my_function(integer, integer) 
RETURNS integer 
AS 
$$ 
    SELECT $1 + $2; 
$$ 
LANGUAGE SQL; 

SELECT my_function(1, 2); 

je faire au lieu d'un PRÉPARER car il sera plus simple de le mettre à jour. En fonction de la complexité de la fonction, vous pouvez également regarder certains des autres PL's dans Postgres.

+0

Pas vraiment ce que je cherchais, je ne veux pas avoir à écrire une fonction à chaque fois que j'ai besoin de déboguer SQL .. Je ne pense pas que la sortie serait ce dont j'ai besoin –

+0

Si tout ce que vous cherchez est un moyen d'utiliser les variables dans votre requête une fonction comme celle-là pour envelopper votre requête est vraiment facile Quel type de sortie recherchez-vous? – dcolish

+0

la sortie que j'obtiendrais si j'exécutais la requête, ou la sortie du débogueur.Ce n'est certainement pas la solution à la question - peut-être qu'il n'y a pas de réponse - je pensais qu'il y avait peut-être une alternative pgAdmin que je pourrais utiliser. Je veux juste coller mon code dans la fenêtre sql, mettre mes vars puis l'exécuter. –

0

Les processus SQL sont notoirement difficiles à déboguer. Ma solution boiteuse mais pratique a été d'écrire les messages du journal à une table de journal, comme celui-ci (s'il vous plaît excuser les problèmes de syntaxe):

create table log_message (
    log_timestamp timestamp not null default current_timestamp, 
    message varchar(1000) 
); 

puis ajouter des lignes à votre proc stocké comme:

insert into log_message (message) values ("The value of x is " || @x); 

Puis, après une exécution:

select * from log_message order by 1; 

Ce n'est pas joli, mais fonctionne dans chaque DB.

+0

Je ne pense pas que leur difficile à déboguer du tout. Esp dans le serveur sql. Désolé, ce n'est pas ce que je cherche. –

Questions connexes