2014-05-13 1 views
10

Sono interessato a fare in modo che la configurazione del server locale postgres corrisponda a quella di produzione. Data una connessione psql ad esso, sarebbe possibile eseguire alcune query ed estrarre le relative opzioni di prestazione? In alternativa, se questo non è possibile, qualcuno conosce le opzioni di configurazione per i piani postgres pagati da heroku?Come si può duplicare la stessa configurazione di ambiente di un server di database?

+1

Perché esattamente vuoi farlo? Le opzioni relative alle prestazioni si suppone che corrispondano all'installazione PG con l'hardware disponibile e lo scenario di utilizzo tipico del server. Non penso che tu abbia lo stesso hardware (almeno, come puoi essere sicuro?) E lo scenario tipico di utilizzo del server sarà diverso quasi per impostazione predefinita. Cosa ti aspetti di apprendere dall'avere le stesse impostazioni di configurazione delle prestazioni in circostanze diverse? – Patrick

+0

Di cosa hai esattamente bisogno? Una soluzione per la corrispondenza delle prestazioni pg di heroku o un clone di configurazione che consente di avere un flusso di lavoro simile a livello locale? – SDude

risposta

5

Questo mostrerà tutte le impostazioni per il server.

SELECT current_setting(name), * FROM pg_catalog.pg_settings

allora si può guardare al postgresql.conf per vedere ciò che è stato impostato manualmente.

Se non si dispone di alcun accesso al postgresql.conf, utilizzare la query di cui sopra su qualche altro server e vedere cosa c'è di diverso :)

+0

Sai se sarebbe possibile leggere il postgresql.conf usando la riga di comando di psql? – Geo

+1

@Tempus: se è nella directory dei dati, 'seleziona * da pg_read_file ('postgresql.conf');' come superutente db. –

+0

@Kirk Roybal: 'current_setting (name)' non è altro che un bel rendering di 'setting' e' unit' colonne, quindi piuttosto superfluo. @ Daniel Verite: Su Heroku un utente normale non ha privilegi 'SUPERUSER'. – Patrick

1

Questo dovrebbe funzionare fino a quando si ha il permesso di leggere la configurazione remota file (cambia il delimitatore in un pizzico).

create table conf(
    line text 
); 

do $$ 
begin 
    execute 
    format(
     'copy conf from ''%s'' delimiter ''|''', 
     current_setting('config_file')); 
end $$; 

select * from conf; 

Due suggerimenti utili.

-- skip empty and commented lines: 

select line from conf 
where line != '' and ltrim(line, e' \t') not like '#%'; 

-- copy conf to file: 

copy (select replace(line, e'\t', ' ') from conf) to 'c:/data/postgres.conf'; 
+0

Deve essere 'SUPERUSER' per leggere config_file e questo non è il caso su Heroku per gli utenti remoti. – Patrick

+0

Ecco come fare senza tabella temporanea e citando i problemi: CON conf AS (SELECT unnest (string_to_array (pg_read_file (current_setting ('config_file')), E '\ n')) riga) SELECT array_to_string (array ( SELECT line FROM conf WHERE not line ~ '[[: space:]] * #' AND length (line)> 0), E '\ n') –