Un approccio all'installazione di Postgres su Windows 7 da utilizzare come database PostgreSQL per un progetto rails 3 (3.0.7).
Preambolo (puoi saltare questo bit)
Quindi la prima cosa da sottolineare è che Postgres non è solo un'estensione di file diversa da .sqlite3, è un intero meccanismo per la gestione dei database. In quanto tale ha un modello client/server, di cui dovrai configurare entrambi per utilizzare Postgres come database per la tua app rails.
Motivazione per affrontare il notevole dolore della configurazione di Postgres rispetto alla configurazione di sqlite quasi senza sforzo:se stai distribuendo su Heroku, stanno attualmente utilizzando Postgres, quindi alcune delle tue chiamate SQL che vanno bene su sqlite3 si interromperanno se utilizzate con Postgres. È molto più semplice eseguire il debug di Postgres in locale piuttosto che quando è sui server di Heroku.
Quindi ho fatto le seguenti cose:(Disclaimer:potrei aver dimenticato di includere alcune delle cose che ho fatto... mi ci sono volute oltre 48 ore di dolore acceso e spento per farlo funzionare... se il seguente consiglio non funziona t funziona per te, quindi l'enorme (2300 pagine!!) ma molto completa documentazione di Postgres dovrebbe aiutarti. Ti consiglio di scaricarlo comunque se sei seriamente intenzionato a usare Postgres poiché ha molto materiale che ho appena iniziato per capire il significato di.)(Secondo disclaimer:ho quasi sicuramente infranto 20 ragionevoli linee guida di Postgres e ho esposto falle di sicurezza nel database di Postgres mentre lo facevo. Se ci sono cose ovvie con cui un utente Postgres esperto non è d'accordo, per favore modifica il mio post.)
.Passaggio 1. Scarica e installa PostgreSQL v9.0.4-1 da qui perché qui dice che solo 9.0.x sarebbe supportato su Windows 7. Ho mantenuto tutte le opzioni predefinite e ho appena usato "segreto" come password quando richiesto dal programma di installazione di Postgres per uno (di nuovo non sono del tutto sicuro di quali siano le conseguenze della condivisione di tali informazioni su Internet ... lo scoprirò presto, ne sono sicuro). Avrai bisogno di questa password nel passaggio 3.
.Passaggio 2. Modifica le variabili di ambiente come Path (per il sistema , non utente (non sono sicuro se questo sia significativo o meno)) è:C:\Program Files\PostgreSQL\9.0\bin
(n.b. sono su Windows a 64 bit quindi non viene installato per 32 bit in 'C:\Program Files (x86)\PostgreS...')
Non dimenticare di modificare i diritti di accesso alla cartella PostgreSQL\9.0 e rimuovere tutti i diritti di sola lettura predefiniti sulla cartella o sul contenuto (potrebbe anche essere necessario riavviare il computer affinché abbiano effetto, grazie @Gavin, anche se non è probabile).
.Passaggio 3. Verifica l'installazione di Postgres provando a creare un nuovo database:Dalla riga di comando:createdb -U postgres mydb_as_postgres
.Dovresti essere richiesto di inserire la password ora, se non lo sei potrebbe essere necessario avviare prima il server (non ricordo se dovevo farlo o meno). Il modo più semplice è tramite pgAdmin III, che dovrebbe essere 'pgAdmin3.exe' in una cartella da qualche parte come C:\Program Files\PostgreSQL\9.0\bin
. Una volta avviato pgAdmin III, dovrebbe esserci un pannello sulla sinistra chiamato 'Browser oggetti'. In questo dovrebbe esserci un albero con:
Gruppi di server> Server> PostgreSQL 9.0 (localhost:5432)
Fare clic con il pulsante destro del mouse su "PostgreSQL 9.0 (localhost:5432)" e selezionare "Connetti".
Il createdb -U postgres mydb_as_postgres
comando dovrebbe creare un nuovo databse chiamato 'mydb_as_postgres' che puoi controllare avviando pgAdmin III e facendo doppio clic su 'PostgreSQL 9.0 (localhost:5432)'. Sotto questo dovrebbe esserci:
Databases (2)
che dovrebbe elencare 2 database chiamati mydb_as_postgres
e postgres
L'ho chiamato _as_postgres
perché -U postgres
parte del comando dice a Postgres di creare il database con l'utente postgres come proprietario, cosa che devi specificare quando non sei registrato come utente postgres. Tuttavia, ho tutti i miei file archiviati come utente "AJames", quindi se sei lo stesso e desideri continuare a sviluppare la tua app dopo aver effettuato l'accesso come utente diverso, devi creare un "ruolo" Postgres per quell'utente ora (vedi passaggio 4).
.Passaggio 4. Attraverso pgAdmin III. Fai clic con il pulsante destro del mouse su Ruoli di accesso (che per me è in):
Browser oggetti> Gruppi di server> Server> PostgreSQL 9.0 (localhost:5432)> Ruoli di accesso
Fai clic con il pulsante destro del mouse su Ruoli di accesso e seleziona "Nuovo ruolo di accesso..." in Nome ruolo, inserisci il nome utente del tuo sistema operativo, che per me è AJames, e inserisci la tua password nella scheda "Privilegi ruolo", ho controllato tutto le caselle, ma un utente postgres esperto probabilmente consiglierebbe vivamente di controllare solo "eredita i diritti dai ruoli principali" e "può creare oggetti di database" Ma non sono un utente esperto e voglio solo eseguire il debug delle chiamate SQL di Rails in Postgres, quindi Ho anche controllato "Superutente" e "Può creare ruoli", per ogni evenienza.
.Passaggio 5. Ora dovresti essere in grado di creare un nuovo database senza essere registrato come utente postgres. Prova a digitare:
createdb mydb_as_user
Spero che questo dovrebbe funzionare per te.
.Passaggio 6. Ok, quindi hai un file development.sqlite3 nella directory 'db/' di rails. Inizialmente stavo per impostare il test successivo come convertire questo da sqlite3 a psql.
Non riuscivo a farlo funzionare, ma ho lasciato i miei tentativi qui poiché la soluzione che ho usato richiedeva di avere i dati in un'app Rails su Heroku.com (vedi invece la soluzione dal punto 7 in poi). Per coloro che hanno solo un'app locale e nessun dato in Heroku, non possono utilizzare lo stesso approccio, quindi potrebbero aver bisogno di esplorare qualcosa del genere:
x6.1 Per prima cosa, prova 'psql' provando un comando dalla tua riga di comando come:
psql mydb_as_user
questo dovrebbe visualizzare qualcosa come di seguito (dopo aver digitato la password):
C:>psql mydb_as_user
Password:
psql (9.0.4)
WARNING: Console code page (850) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
Type "help" for help.
mydb5=#
x6.2 prova a inserire:
CREATE TABLE users_table (id integer, "name" text);
Dovrebbe visualizzare:
CREATE TABLE
mydb5=#
Se controlli pgAdmin III, dovresti vedere la tabella sotto:
Browser di oggetti> Gruppi di server> Server> PostgreSQL 9.0 (localhost:5432)> Database> mydb_as_user> Schemi> public> Tabelle> users_table>
x6.3 Va bene, avanti per provare la conversione. Binario precompilato sqlite-shell scaricato per Windows.
x6.4 Crea una nuova directory, ho usato 'C:\temp' e ho inserito sqlite3.exe e i tuoi file development.sqlite3.
x6. 5 Utilizzare i seguenti comandi (da qui) per eseguire il dump del database development.sqlite3 in Postgres.
sqlite3 development .dump | psql development2
potresti ricevere un errore del tipo:
psql: FATAL: database "development2" does not exist
x6.6 quindi sono entrato in pgAdmin III e ho creato un database di sviluppo 2, ho provato di nuovo il comando e ho ottenuto:
ERROR: syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
^
BEGIN
COMMIT
Come ho detto, non riuscivo a farlo funzionare. Sono sicuro che c'è un modo per aggirare quell'errore, ma ho pensato a un modo diverso e quindi ho invece usato questa soluzione (che richiede un account Heroku per avere i tuoi dati ed esegue la conversione da sqlite3 a psql usando la gemma Taps (io credere):
.Passaggio 7. in pgAdmin III ho creato un altro database. Nella scheda delle proprietà ho impostato il nome:'sviluppo', proprietario:'AJames' (sostituiscilo con il tuo nome utente Windows). E nella scheda dei privilegi, imposta il ruolo:'pubblico' e seleziona l'opzione TUTTO (pensavo che fosse reimpostato su deselezionato, quindi non sono sicuro che sia necessario).
.Passaggio 8. addgem 'pg', '0.11.0'
nel tuo file gem. Probabilmente vorrai anche rimuovere:gem 'sqlite3'
anche a questo punto.
.Passaggio 9. imposta database.yml come suggerito qui a:
development:
adapter: postgresql
database: db/development
username: AJames # replace this with your own user name
password: secret # replace this with your own password
host: localhost
encoding: UTF8
pool: 5
timeout: 5000
Se stai lavorando a un progetto open source e non vuoi che la tua password sia resa pubblicamente disponibile, dai un'occhiata ad alcune delle risposte a Fornire in modo sicuro la password del database in un'app Rails.
.Passaggio 10. dalla riga di comando nella directory principale dell'app rails esegui:rake db:migrate
Questo creerà il nuovo schema e tutte le tabelle nel database di Postgres.
.Passaggio 11. esegui heroku db:pull
dalla tua riga di comando (di nuovo dalla directory principale della tua app rails) per estrarre tutti i tuoi dati e nel tuo nuovo database Postgres vuoto. Penso che a questo punto la tua gemma dei rubinetti farà questo lavoro per te.
.Passaggio 12. Speriamo che non ci sia il passaggio 12! ...e ora dovrebbe funzionare per te. Buon debug RoR PostgreSQL! Si prega di modificare, o di farmi sapere, se ci sono errori in questo.
Inoltre, ecco un elenco di cose aggiuntive che potrebbero essere interessanti/utili:
- Questo è un post sul blog sulle password Postgres, a cosa servono, perché ne hai bisogno, come cambiarle ecc.
- Questo, sotto 'Creazione di un database spaziale', è utile per i neofiti per capire di cosa tratta pg_hba.conf e il secondo collegamento fornito da Reno sopra, sotto 'Utilizzo della GUI di pgAdmin III' è utile per testare se postgres funziona effettivamente , prima di provare ad adattarlo con Rails (ad esempio, prova a creare un database e a inserirci una tabella e alcuni dati).
- Nell'enorme ma esauriente documentazione di Postgres, inizierei a pagina 58, 'I. tutorial'. Poi a pagina 431(!) del pdf c'è il "Capitolo 17. Configurazione e funzionamento del server" che ho trovato utile anche io.