En tilgang til installation af Postgres på Windows 7 til brug som PostgreSQL-database for et rails 3 (3.0.7) projekt.
Forord (du kan springe denne bit over)
Så den første ting at påpege er, at Postgres ikke bare er en anden filtypenavn end .sqlite3, det er en hel mekanisme til at administrere dine databaser. Som sådan har den en klient/server-model, som du skal konfigurere begge for at bruge Postgres som databasen til din rails-app.
Motivation for at gå igennem en betydelig smerte af Postgres-opsætning versus næsten ubesværet sqlite-opsætning:hvis du implementerer til Heroku, bruger de i øjeblikket Postgres, så nogle af dine SQL-kald, der er fine på sqlite3, vil bryde, når de bruges med Postgres. Det er meget nemmere at fejlsøge postgres lokalt i stedet for, når det er på Herokus servere.
Så jeg gjorde følgende:(Ansvarsfraskrivelse:Jeg har muligvis glemt at inkludere nogle af de ting, jeg gjorde... det tog mig over 48 timer med on- og off-smerter at få det til at virke... hvis følgende råd ikke Det virker ikke for dig, så burde den enorme (2300 sider!!) men meget grundige Postgres-dokumentation hjælpe. Jeg vil anbefale at downloade denne alligevel, hvis du er seriøs med at bruge Postgres, da den har en masse materiale, som jeg kun lige er begyndt på. at forstå betydningen af.)(Anden ansvarsfraskrivelse:Jeg har næsten helt sikkert brudt 20 fornuftige Postgres-retningslinjer og afsløret sikkerhedshuller i Postgres-databasen, mens jeg gjorde det. Hvis der er nogle åbenlyse ting, som en erfaren Postgres-bruger er uenig i, bedes du redigere mit indlæg.)
.Trin 1. Download og installer PostgreSQL v9.0.4-1 herfra, fordi her sagde, at kun 9.0.x ville blive understøttet på Windows 7. Jeg beholdt alle standardindstillingerne og brugte bare 'hemmelig' som adgangskode, da Postgres-installationsprogrammet blev bedt om det (igen) ikke helt sikker på, hvad konsekvenserne af at dele den information på internettet er... vil snart finde ud af det, er jeg sikker på). Du skal bruge denne adgangskode i trin 3.
.Trin 2. Skift miljøvariabler, således at Sti (for system , ikke bruger (jeg er ikke sikker på, om dette er væsentligt eller ej)) er:C:\Program Files\PostgreSQL\9.0\bin
(n.b. Jeg er på 64-bit windows, derfor bliver det ikke installeret til 32-bit i 'C:\Program Files (x86)\PostgreS...')
Glem ikke at ændre adgangsrettigheder til mappen PostgreSQL\9.0 og fjerne alle standard skrivebeskyttede rettigheder til mappen eller indholdet.(Du skal muligvis også genstarte din computer for at disse træder i kraft - tak @Gavin -selvom det ikke er sandsynligt).
.Trin 3. Test Postgres installation ved at prøve at oprette en ny database:Fra kommandolinje:createdb -U postgres mydb_as_postgres
.Du skal blive bedt om at indtaste adgangskoden nu, hvis du ikke er det, kan det være, at du skal starte serveren først (jeg kan ikke huske, om jeg skulle gøre dette eller ej). Den nemmeste måde er gennem pgAdmin III, som burde være 'pgAdmin3.exe' i en mappe et sted som C:\Program Files\PostgreSQL\9.0\bin
. Når du har startet pgAdmin III, skulle der være et panel til venstre kaldet 'Objektbrowser'. I denne skulle der være et træ med:
Servergrupper> Servere> PostgreSQL 9.0 (localhost:5432)
Højreklik på 'PostgreSQL 9.0 (localhost:5432)' og vælg 'Connect'.
createdb -U postgres mydb_as_postgres
kommandoen skulle oprette en ny database kaldet 'mydb_as_postgres', som du kan tjekke ved at starte pgAdmin III og dobbeltklikke på 'PostgreSQL 9.0 (localhost:5432)'. Under denne skal der være:
Databases (2)
som skulle vise 2 databaser kaldet mydb_as_postgres
og postgres
Jeg kaldte det _as_postgres
fordi -U postgres
en del af kommandoen fortæller Postgres at oprette databasen med postgres-brugeren som dens ejer, hvilket du skal angive, når du ikke er logget ind som postgres-bruger. Jeg har dog alle mine filer gemt som 'AJames' bruger, så hvis du er den samme og vil fortsætte med at udvikle din app, når du er logget ind som en anden bruger, skal du oprette en Postgres 'rolle' for den bruger nu (se trin 4).
.Trin 4. Gennem pgAdmin III. Højreklik på Login-roller (som for mig er i):
Objektbrowser> Servergrupper> Servere> PostgreSQL 9.0 (localhost:5432)> Loginroller
Højreklik på Login-roller og vælg 'Ny login-rolle...'i rollenavn, indtast dit operativsystems brugernavn, som for mig er AJames, og udfyld din adgangskode under fanen 'Rolleprivilegier', jeg har tjekket alle boksene, men en erfaren postgres-bruger vil sandsynligvis stærkt anbefale kun at kontrollere 'arver rettigheder fra overordnede roller' og 'kan oprette databaseobjekter'. Men jeg er ikke en erfaren bruger og vil bare fejlsøge Rails SQL-kald i Postgres, så Jeg tjekkede også 'Superbruger' og 'Kan oprette roller', for en sikkerheds skyld.
.Trin 5. Du skulle nu være i stand til at oprette en ny database uden at være logget på som postgres-bruger. Prøv at skrive:
createdb mydb_as_user
Forhåbentlig burde dette virke for dig.
.Trin 6. Okay, så du har en development.sqlite3-fil i din rails 'db/'-mappe. Til at begynde med skulle jeg indstille den næste test til at konvertere dette fra sqlite3 til psql.
Jeg kunne dog ikke få dette til at virke, men jeg forlod mine forsøg her, da den løsning, jeg brugte, krævede at have dataene i en Rails-app på Heroku.com (se i stedet løsningen fra trin 7 og frem). For dem, der kun har en lokal app og ingen data i Heroku, kan de ikke bruge den samme tilgang, så de skal muligvis udforske noget som dette:
x6.1 Test først 'psql' ved at prøve en kommando fra din kommandolinje som:
psql mydb_as_user
dette skulle vise noget som nedenfor (efter du har indtastet din adgangskode):
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 prøv at indtaste:
CREATE TABLE users_table (id integer, "name" text);
Det skal vise:
CREATE TABLE
mydb5=#
Hvis du tjekker pgAdmin III ind, bør du se tabellen der under:
Objektbrowser> Servergrupper> Servere> PostgreSQL 9.0 (localhost:5432)> Databaser> mydb_as_user> Skemaer> offentlig> Tabeller> brugertabel>
x6.3 Okay, næste for at prøve konverteringen. Downloadede sqlite-shell prækompileret binær til Windows.
x6.4 Opret en ny mappe, jeg brugte 'C:\temp' og lagde sqlite3.exe og dine development.sqlite3-filer i den.
x6. 5 Brug følgende kommandoer (som er herfra) til at dumpe databasen development.sqlite3 i Postgres.
sqlite3 development .dump | psql development2
du får muligvis en fejl som:
psql: FATAL: database "development2" does not exist
x6.6 så jeg gik ind i pgAdmin III og lavede en udvikling 2 database, prøvede kommandoen igen og fik:
ERROR: syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
^
BEGIN
COMMIT
Som sagt kunne jeg ikke få det til at virke. Jeg er sikker på, at der er en måde at komme uden om den fejl, men jeg tænkte på en anden måde, og så brugte jeg i stedet denne løsning (som kræver en Heroku-konto for at have dine data og udfører konverteringen fra sqlite3 til psql ved hjælp af Taps-perlen (jeg) tro):
.Trin 7. i pgAdmin III oprettede jeg en anden database. Under fanebladet Egenskaber sætter jeg navn:'udvikling', ejer:'AJames' (erstat dette med dit eget Windows-brugernavn). Og under fanen privilegier, indstil rolle:'offentlig' og markeret indstillingen ALLE (troede, at dette nulstilles til umarkeret, så jeg er ikke sikker på, at det er nødvendigt).
.Trin 8. tilføjegem 'pg', '0.11.0'
til din gem-fil. Du vil sandsynligvis også fjerne:gem 'sqlite3'
også på dette tidspunkt.
.Trin 9. sæt database.yml som foreslået her til:
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
Hvis du arbejder på et open source-projekt og ikke ønsker, at dit kodeord skal gøres offentligt tilgængeligt, så tag et kig på nogle af svarene til Sikker levering af databaseadgangskoden i en Rails-app.
.Trin 10. fra kommandolinjen i din rails app's rodmappe kør:rake db:migrate
Dette vil oprette det nye skema og alle tabellerne i Postgres-databasen.
.Trin 11. kør heroku db:pull
fra din kommandolinje (igen fra rodmappen i din rails-app) for at trække alle dine data ned og ind i din nye tomme Postgres-database. Jeg tror på dette tidspunkt, at din taps-perle vil gøre dette arbejde for dig.
.Trin 12. Forhåbentlig er der ikke noget trin 12! ...og det burde nu virke for dig. Glad RoR PostgreSQL-fejlretning! Rediger venligst, eller lad mig vide, hvis der er nogen fejl i dette.
Her er også en liste over yderligere ting, der kan være interessante/nyttige:
- Dette er et blogindlæg om Postgres-adgangskoder, hvad de er til, hvorfor du har brug for dem, hvordan du ændrer dem osv.
- Dette, under 'Oprettelse af en rumlig database', er nyttigt for nybegyndere til at forstå, hvad pg_hba.conf handler om, og det andet link, som Reno gav ovenfor, under 'Brug af pgAdmin III GUI' er nyttigt at teste for at se, om postgres rent faktisk virker , før du prøver at passe til Rails (dvs. prøv at oprette en database og indsætte en tabel og nogle data i den).
- I den enorme, men meget omfattende Postgres-dokumentation, ville jeg starte på side 58, 'I. tutorial'. Så på pdf side 431(!) er der 'Kapitel 17. Serveropsætning og drift', som jeg også fandt nyttig.