Imposta in modo permanente il percorso dello schema Postgresql


136

Devo impostare il percorso dello schema in Postgres in modo da non specificare ogni volta la tabella dei punti dello schema, ad es schema2.table. Imposta percorso schema:

SET SCHEMA PATH a,b,c

sembra funzionare solo per una sessione di query su Mac, dopo aver chiuso la finestra della query la variabile percorso si ripristina ai valori predefiniti.

Come posso renderlo permanente?


Penso che sia SET search_path TO a, b, c; come dice la risposta e non SET PERCORSO SCHEMA a, b, c;
Armando,

Risposte:


168

(E se non si dispone dell'accesso di amministratore al server)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

Due cose importanti da sapere:

  1. Quando un nome di schema non è semplice, deve essere racchiuso tra virgolette doppie.
  2. L'ordine in cui si impostano gli schemi predefiniti è a, b, cimportante, poiché è anche l'ordine in cui gli schemi verranno cercati per le tabelle. Quindi se hai lo stesso nome di tabella in più di uno schema tra i valori predefiniti, non ci sarà alcuna ambiguità, il server utilizzerà sempre la tabella dal primo schema specificato per il tuo search_path.

19
Vale anche la pena notare che NON utilizzare esplicitamente le virgolette intorno all'enumerazione a, b, c.
Faccia a faccia

4
@ Jmoney38 Non usare virgolette singole, ma per virgolette non semplici sono richieste doppie virgolette.
vitaly-t

136

È possibile impostare il valore predefinito search_patha livello di database:

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

O a livello di utente o ruolo:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

Oppure, se hai uno schema predefinito comune in tutti i tuoi database, puoi impostare il valore predefinito a livello di sistema nel file di configurazione con l' opzione search_path .

Quando viene creato un database, questo viene creato per impostazione predefinita da un database "modello" nascosto denominato template1 , è possibile modificare tale database per specificare un nuovo percorso di ricerca predefinito per tutti i database creati in futuro. È inoltre possibile creare un altro database modello e utilizzarlo CREATE DATABASE <database_name> TEMPLATE <template_name>per creare i database.


9
per coloro che si chiedono dalla riga di comando di psql è possibile elencare gli schemi in base a \ dn
BKSpurgeon,

3
È necessario disconnettere la sessione e riconnettersi per rendere effettive le impostazioni.
Isapir,

oh ti benedica. venuto su PG da SQL Server, quindi per me è tutto nuovo (e strano)
Nate Anderson,

24

Josh ha ragione ma ha lasciato fuori una variante:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

Imposta il percorso di ricerca per l'utente, in un determinato database.


anche molto utile. Grazie
Alejandro Teixeira Muñoz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.