Domanda

In SQL Server ho potuto copiare il codice SQL da un'applicazione e incollarlo in SSMS, dichiarare e assegnare Vars che esistono in SQL ed eseguire. yay grande scenario di debug.

es. (Si prega di notare io sono arrugginiti e sintassi può essere corretto):

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

Voglio fare qualcosa di simile con Postgres in pgAdmin (o un altro strumento Postgres, eventuali raccomandazioni?) Dove posso solo cadere My SQL (params e tutti) in qualcosa che verrà eseguito contro Postgres DB.

Mi rendo conto che è possibile creare pgscript, ma non sembra essere molto buono, per esempio, se faccio l'equivalente di cui sopra, non mettere le virgolette singole intorno al valore di @x, né lasciatemi da loro raddoppio e non si ottiene un tavolo dopo - solo il testo ...

Attualmente ho un pezzo di SQL qualcuno ha scritto che ha 3 variabili uniche in essa che vengono utilizzati circa 6 volte ogni ...

Quindi, la domanda è come fare altre persone di debug SQL in modo efficiente , preferibilmente in un modo simile ai miei giorni di SQL Server.

È stato utile?

Soluzione

È possibile ottenere ciò utilizzando il preparare, ESEGUI, comandi DEALLOCATE per le dichiarazioni di movimentazione, che è davvero quello di cui stiamo parlando qui.

Ad esempio:

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

Forse non come grafica come qualcuno potrebbe piacere, ma certamente praticabile.

Altri suggerimenti

I darebbe un colpo a scrivere una funzione SQL che avvolge la query. Può essere qualcosa di semplice come

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

SELECT my_function(1, 2);

vorrei fare questo invece di un PREPARARE in quanto sarà più semplice per aggiornarlo. A seconda di come complessa la funzione è, si potrebbe desiderare di guardare anche ad alcuni degli altri di PL in Postgres.

proc SQL sono notoriamente difficili da eseguire il debug. Il mio zoppo ma soluzione pratica è stata quella di messaggi di log in scrittura a un tavolo di log, come questo (scusate problemi di sintassi):

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

quindi aggiungere righe al proc memorizzato come:

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

Poi, dopo una corsa:

select * from log_message order by 1;

Non è bello, ma funziona in ogni DB.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top