2013-03-06 37 views
47

Ho un file .sql con una serie di comandi di inserimento che voglio eseguire sul mio database postgres su heroku. Ma non so come farlo: -come eseguire uno script .sql su heroku?

Se ho avuto accesso a console postgres avrei digitare la seguente:

psql -h localhost -d database -U username -f datafile.sql 

ma sembra che Heroku non supporta questo comando. Ho provato con

heroku pg:psql 

ma questo non mi permette di inserire un file.

Ci sono altre opzioni?

risposta

85

per cose come la semina di un database, vi consiglio la risposta di Richard Brown: sei probabilmente meglio usare qualcosa di simile a Rails semi meccanismo, o qualcosa di script come un compito rastrello.

Detto questo, essere in grado di pipe sql (raw o un file) è una funzionalità utile, in particolare per le cose idempotenti come semplici ricerche o query di routine. Nel qual caso è possibile eseguire il proprio sql locale con uno dei seguenti valori:

$ cat file.sql | heroku pg:psql --app app_name 
$ echo "select * from table;" | heroku pg:psql --app app_name 
$ heroku pg:psql --app app_name < file.sql 
+0

funziona perfettamente! Grazie –

+1

Piccola nota, il '--app app_name' non è richiesto. Eseguo 'heroku pg: psql' dalla directory in cui si trova la mia app heroku e rileva il nome dell'app. Oltre a questo, funziona alla grande! – levibostian

+0

Ricevo errore "Impossibile localizzare il comando psql locale."? – wedo

2

Mi piacciono gli aggiornamenti testabili e ripetibili. Quando devo aggiornare il database, scrivo un'attività rake per eseguire l'aggiornamento; in questo modo è possibile eseguirlo prima test per garantire che l'output sia corretto prima di essere in produzione.

Non si parla di caricamento iniziale del database o di esecuzione successiva, ma la convenzione per il caricamento di nuovi dati in un database Rails consiste nel creare un file rake che è possibile eseguire dopo aver eseguito l'attività db:migrate.

See: http://justinfrench.com/notebook/a-custom-rake-task-to-reset-and-seed-your-database E: http://railscasts.com/episodes/179-seed-data

+0

Il link dice: _ "Un compito Rake personalizzato per ripristinare e seminare il database" che stai cercando è stato removed_ – chomp

+0

che accade a vecchi link . Archive.org in soccorso: http://web.archive.org/web/20130312172900/http://justinfrench.com/notebook/a-custom-rake-task-to-reset-and-seed-your-database –

16

Perché non usare solo psql?

Se si guarda l'output di heroku config vedrete gli URL database (chiave DATABASE_URL) l'applicazione utilizza - se si prende questo e dissolversi nel ai bit corretti per l'utilizzo con il psql tutto sarà buono.

esempio

DATABASE_URL: postgres://username:[email protected]:port/dbname 

diventa

psql -h host -p port -d dbname -U username -f datafile.sql 
+1

Ho ricevuto l'errore: 'FATAL: nessuna voce pg_hba.conf per l'host ...' – joepd

+1

assicurati di utilizzare SSL per la connessione - potrebbe richiedere '& ssl = require' sulla stringa di connessione. –

Problemi correlati