PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come rendere un'estensione non riposizionabile?

Per prima cosa, devi cambiare relocatable a false nel file di controllo dell'estensione.

A parte questo, la raccomandazione che hai ricevuto è in parte ragionevole e in parte priva di senso.

Dovresti definire le tue funzioni in questo modo:

CREATE FUNCTION .... AS
$$ /* function body */ $$
SET search_path = @[email protected];

Quindi il search_path è fisso su pg_catalog , pg_temp e il tuo schema di estensione per la durata della chiamata alla funzione. Ciò significa che tutti gli accessi agli oggetti senza uno schema esplicito cercheranno solo in questi schemi.

Quindi non devi preoccuparti di qualificare esplicitamente tutto nella funzione con @[email protected] e puoi usare gli operatori senza preoccuparti, perché search_path vale anche per gli operatori. (Puoi anche qualificare lo schema agli operatori:OPERATOR(schema.+) , ma è ovviamente doloroso e danneggia la leggibilità.)