2012-03-25 19 views
15

Sto passando lentamente da MSSQL a PostgreSQL.Come modificare la stored procedure di PostgreSQL?

In MSSQL potevo chiamare la modifica della procedura o della funzione già salvata e la shell di amministrazione (SQL Server Management Studio) mi mostrava il testo della procedura, quindi non dovevo memorizzare il suo codice sorgente da qualche parte nel file di testo.

Come fare lo stesso con PostgreSQL nel modo più conveniente? Sto usando pgAdmin III.

+3

Memorizzazione di stored procedure in un file esterno è altamente raccomandato in ogni caso (idealmente in un sistema di controllo di versione) –

+0

@a_horse_with_no_name:. Io preferisco un diverso Ho un test db cluster per ogni cluster db produttivo (raramente copiato) dove ho sperimentato.Se considerato buono, implemento nel cluster db produttivo.Oltre ai soliti backup eseguo backup frequenti solo dello schema, specialmente prima/Dopo le modifiche allo schema, i repository tradizionali sono di uso limitato per gli schemi di database poiché i dati cambiano costantemente e molte modifiche non possono essere (facilmente) ripristinate. –

+1

@ErwinBrandstetter: il problema con questo approccio è che si perde l'overv Scopri quali modifiche devi applicare per ottenere un database dalla versione x alla versione x + 1. Hai bisogno di un luogo centralizzato in cui ogni cambiamento possa essere tracciato (e idealmente mappato, ad esempio, in un ticket di emissione). Se si dispone di più di un ambiente (sviluppo, test, gestione temporanea, convalida, regressione, preproduzione, produzione) e forse anche più di una versione in produzione (si pensi a paesi diversi) Non vedo come è possibile tenere traccia di tutti cambia senza VCS. –

risposta

18

Ci sono 2 client inclusi nelle distribuzioni ufficiali di Postgres - il CLI uno psql e uno GUI uno pgAdmin. Entrambi supportano ciò che si desidera: per psql è \ef e per pgAdmin - fare clic con il tasto destro del mouse sulla funzione, "Proprietà", scheda "Codice".

+1

'\ ef' funziona, ma non salverà la funzione? – redolent

+2

@redolent, potrebbe essere necessario aggiungere manualmente ';' alla fine del file aperto, o semplicemente aggiungere un singolo ';' e premi invio se hai già chiuso l'editor. – 10gistic

1

phpPgAdmin consente di modificare le stored procedure e modificarle nell'interfaccia. Il commento lasciato sotto la tua domanda su come conservarli esternamente per il controllo della versione è altamente raccomandato.

3

In pgAdmin si può rendere la vita più facile se si attiva questa opzione:

File -> Opzioni .. -> Query Tool -> [x] Copia SQL dal modulo principale per il dialogo SQL

Quindi, tutto ciò che viene visualizzato nel riquadro SQL verrà copiato in una finestra di Query Tool appena aperta. Quindi, seleziona la funzione nel browser degli oggetti e fai clic sull'icona della lente di ingrandimento nella barra degli strumenti.

Essere consapevoli di un bug aperto nella versione corrente 1.14.2. Per impostazione predefinita, public ha il privilegio EXECUTE sulle funzioni. Puoi REVOKE questo privilegio, che è utile solo per le funzioni SECURITY DEFINER. Ma questo REVOKE manca nelle istruzioni DDL con reverse engineering di pgAdmin (un NULL è stato confuso con un ACL vuoto). Attenzione se si elimina e si ricrea una tale funzione!

2

È anche un modo conveniente per modificare il codice e testarlo.

1) Estrarre il codice di una funzione SQL richiesta da pgAdmin.

2) Inserire il codice con la funzione in file.sql.

3) Creare un file di shell/bat nella stessa directory con file.sql:

psql -U postgres dbname < file.sql 

4) inserire un collegamento per il file di shell/bat in un pannello veloce.

5) Modificare il file con l'editor di testo preferito e premere il collegamento per aggiornare la funzione.

+0

In generale trovo che il tuo contributo sia utile, ma in questo caso specifico il tuo suggerimento è esattamente quello che paul * NON * voleva fare: "quindi non dovevo memorizzare il suo codice sorgente da qualche parte nel file di testo" - probabilmente perché pensa che questo approccio è troppo complicato per essere chiamato "conveniente". – ChristophK

0

fare clic destro sul funzione albero di oggetti (sul lato sinistro) -> Script -> Script CREATE

oppure

Esegui nuova query SQL -> codice copia di "creare o sostituire funzione ..."Ad essa

quindi modificare il copione e non ha dimenticato di eseguirlo

Problemi correlati