Alcuni punti della nostra esperienza sia in termini di manutenibilità e sicurezza. Un sacco di cose come la formattazione del codice sono cose che possono essere fatte in un numero qualsiasi di modi finché sei coerente e usi lo spazio bianco in modo appropriato.
Per quanto riguarda ciò che non è sicuro da una prospettiva di sicurezza, l'unica cosa che viene in mente è combinare SECURITY DEFINER, EXECUTE e l'interpolazione delle stringhe. Ciò porta alla possibilità di SQL injection che verrà eseguito come proprietario della funzione. A volte ciò è necessario (quindi utilizzare quote_ident e quote_literal come appropriato), ma quando lo è, il codice deve essere ulteriormente esaminato per i punti deboli. Questo si verifica quando si esegue DDL all'interno di proc stored, in particolare per la gestione degli utenti.
Una precauzione è tuttavia la possibilità che il percorso di ricerca abbia problemi con le funzioni SICUREZZA DEFINER. Potresti volerlo considerare in particolare nei casi in cui gli utenti avranno la possibilità di creare relazioni in altri schemi (o anche relazioni temporanee). Vedi link
Una seconda cosa che preferisco fare è aggiungere COMMENT ON FUNCTION .... dopo ogni definizione di funzione. Penso che questo sia preferibile ai commenti esplicativi dell'API in alto perché può essere richiamato da strumenti di documentazione automatica.
Una terza cosa che consiglio vivamente è di cercare di mantenere le funzioni PLPGSQL nella forma di una query db principale con piccole quantità di logica procedurale di supporto. Questo aiuta sia con chiarezza che con il debug. Quanto più è possibile consolidare in una singola query tanto più velocemente è possibile eseguire il debug della procedura nel suo complesso, perché ci sono meno possibilità di nascondere qualsiasi errore dato.
Infine una grande trappola che si verifica con le funzioni definite dall'utente che vengono chiamate dall'applicazione è che le funzioni richiedono spesso un numero fisso di argomenti e questo può essere un problema in termini di manutenibilità. Consiglierei di leggere questo link che è un tentativo di applicare ciò che si può imparare dal web servizi alle stored procedure di PostgreSQL.
Il mio blog, link , presenta regolarmente pensieri ed esperienze su questo argomento, quindi potrebbe essere utile: -)