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?
risposta
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 :)
Sai se sarebbe possibile leggere il postgresql.conf usando la riga di comando di psql? – Geo
@Tempus: se è nella directory dei dati, 'seleziona * da pg_read_file ('postgresql.conf');' come superutente db. –
@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
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';
Deve essere 'SUPERUSER' per leggere config_file e questo non è il caso su Heroku per gli utenti remoti. – Patrick
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') –
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
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