Een benadering voor het installeren van Postgres op Windows 7 voor gebruik als PostgreSQL-database voor een rails 3 (3.0.7)-project.
Preambule (je kunt dit stukje overslaan)
Dus het eerste waar we op moeten wijzen is dat Postgres niet alleen een andere bestandsextensie is dan .sqlite3, het is een heel mechanisme voor het beheren van uw databases. Als zodanig heeft het een client/server-model, waarvan u beide moet instellen om Postgres te gebruiken als de database voor uw rails-app.
Motivatie om veel moeite te doen met Postgres-configuratie versus bijna moeiteloze sqlite-configuratie:als je naar Heroku implementeert, gebruiken ze momenteel Postgres, dus sommige van je SQL-aanroepen die prima zijn op sqlite3 zullen breken wanneer ze worden gebruikt met Postgres. Het is veel gemakkelijker om postgres lokaal te debuggen dan wanneer het op de servers van Heroku staat.
Dus ik deed de volgende dingen:(Disclaimer:ik ben misschien vergeten om sommige dingen die ik deed op te nemen ... het kostte me meer dan 48 uur aan en uit pijn om het te laten werken ... als het volgende advies niet werkt' werkt het niet voor jou, dan zou de enorme (2300 pagina's!!) maar zeer grondige Postgres-documentatie moeten helpen. Ik zou toch aanraden dit te downloaden als je serieus bent over het gebruik van Postgres, aangezien het veel materiaal bevat waar ik nog maar net mee begonnen ben om de betekenis van te begrijpen.) (Tweede disclaimer:ik heb vrijwel zeker 20 verstandige Postgres-richtlijnen geschonden en beveiligingslekken in de Postgres-database blootgelegd terwijl ik dit deed. Als er duidelijke dingen zijn waar een ervaren Postgres-gebruiker het niet mee eens is, bewerk dan mijn bericht.)
.Stap 1. Download en installeer PostgreSQL v9.0.4-1 vanaf hier omdat hier werd gezegd dat alleen 9.0.x zou worden ondersteund op Windows 7. Ik heb alle standaardopties behouden en gewoon 'geheim' gebruikt als het wachtwoord toen het Postgres-installatieprogramma erom vroeg (opnieuw niet helemaal zeker wat de gevolgen zijn van het delen van die info op internet... zal er snel achter komen dat weet ik zeker). U heeft dit wachtwoord nodig in stap 3.
.Stap 2. Verander omgevingsvariabelen zodanig dat Pad (voor systeem , not user (ik weet niet zeker of dit significant is of niet)) is:C:\Program Files\PostgreSQL\9.0\bin
(n.b. ik gebruik 64-bits Windows en daarom wordt het niet voor 32-bits geïnstalleerd in 'C:\Program Files (x86)\PostgreS...')
Vergeet niet de toegangsrechten voor de map PostgreSQL\9.0 te wijzigen en alle standaard alleen-lezenrechten voor de map of inhoud te verwijderen. (Mogelijk moet u ook uw computer opnieuw opstarten om deze van kracht te laten worden - bedankt @Gavin - hoewel niet waarschijnlijk).
.Stap 3. Test de installatie van Postgres door te proberen een nieuwe database te maken:Vanaf de opdrachtregel:createdb -U postgres mydb_as_postgres
.U zou nu moeten worden gevraagd om het wachtwoord in te voeren, als u dat niet bent, moet u mogelijk eerst de server starten (ik weet niet meer of ik dit moest doen of niet). De gemakkelijkste manier is via pgAdmin III, dat 'pgAdmin3.exe' zou moeten zijn in een map ergens als C:\Program Files\PostgreSQL\9.0\bin
. Als je eenmaal pgAdmin III hebt gestart, zou er aan de linkerkant een paneel moeten zijn met de naam 'Objectbrowser'. Hierin zou een boom moeten staan met:
Servergroepen> Servers> PostgreSQL 9.0 (localhost:5432)
Klik met de rechtermuisknop op 'PostgreSQL 9.0 (localhost:5432)' en selecteer 'Verbinden'.
De createdb -U postgres mydb_as_postgres
commando moet een nieuwe database aanmaken met de naam 'mydb_as_postgres' die u kunt controleren door pgAdmin III te starten en te dubbelklikken op 'PostgreSQL 9.0 (localhost:5432)'. Hieronder moet staan:
Databases (2)
die 2 databases zou moeten vermelden met de naam mydb_as_postgres
en postgres
Ik noemde het _as_postgres
omdat de -U postgres
een deel van de opdracht vertelt Postgres om de database te maken met de postgres-gebruiker als de eigenaar, die u moet specificeren wanneer u niet bent aangemeld als de postgres-gebruiker. Ik heb al mijn bestanden opgeslagen als 'AJames'-gebruiker, dus als je dezelfde bent en je app wilt blijven ontwikkelen wanneer je bent aangemeld als een andere gebruiker, moet je nu een Postgres-'rol' voor die gebruiker maken (zie stap 4).
.Stap 4. Via pgAdmin III. Klik met de rechtermuisknop op Aanmeldingsrollen (die voor mij in):
Objectbrowser> Servergroepen> Servers> PostgreSQL 9.0 (localhost:5432)> Aanmeldingsrollen
Klik met de rechtermuisknop op Login Roles en selecteer 'New Login Role...'in Role name, voer de gebruikersnaam van uw besturingssysteem in, wat voor mij AJames is, en vul uw wachtwoord in onder het tabblad 'Role Privileges', ik heb alles gecontroleerd de vakken, maar een ervaren postgres-gebruiker zou waarschijnlijk sterk aanbevelen om alleen de 'erft rechten van bovenliggende rollen' en de 'kan database-objecten maken' aan te vinken. Maar ik ben geen ervaren gebruiker en wil alleen fouten opsporen in Rails SQL-aanroepen in Postgres, dus Ik heb ook de 'Superuser' en 'Kan rollen maken' aangevinkt, voor het geval dat.
.Stap 5. U zou nu een nieuwe database moeten kunnen maken zonder dat u zich hoeft aan te melden als de postgres-gebruiker. Probeer te typen:
createdb mydb_as_user
Hopelijk zou dit voor jou moeten werken.
.Stap 6. Oké, dus je hebt een development.sqlite3-bestand in je rails 'db/'-directory. Aanvankelijk zou ik de volgende test instellen om dit van sqlite3 naar psql te converteren.
Ik kreeg dit echter niet werkend, maar ik liet mijn pogingen hier achter omdat de oplossing die ik gebruikte vereiste dat de gegevens in een Rails-app op Heroku.com (zie in plaats daarvan de oplossing vanaf stap 7). Voor degenen die alleen een lokale app hebben en geen gegevens in Heroku, ze kunnen niet dezelfde aanpak gebruiken, dus moeten ze misschien zoiets als dit verkennen:
x6.1 Test eerst 'psql' door een commando uit je commandoregel te proberen, zoals:
psql mydb_as_user
dit zou er ongeveer als volgt uit moeten zien (nadat je je wachtwoord hebt ingevoerd):
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 probeer in te voeren:
CREATE TABLE users_table (id integer, "name" text);
Het zou moeten weergeven:
CREATE TABLE
mydb5=#
Als u pgAdmin III incheckt, zou u de tabel daar moeten zien onder:
Objectbrowser> Servergroepen> Servers> PostgreSQL 9.0 (localhost:5432)> Databases> mydb_as_user> Schema's> openbaar> Tabellen> users_table>
x6.3 Oké, probeer vervolgens de conversie. Sqlite-shell voorgecompileerd binair bestand voor windows gedownload.
x6.4 Maak een nieuwe map, ik heb 'C:\temp' gebruikt en de bestanden sqlite3.exe en je development.sqlite3 erin gezet.
x6. 5 Gebruik de volgende opdrachten (die hier vandaan komen) om de database development.sqlite3 in Postgres te dumpen.
sqlite3 development .dump | psql development2
u kunt een foutmelding krijgen zoals:
psql: FATAL: database "development2" does not exist
x6.6 dus ik ging naar pgAdmin III en maakte een database voor ontwikkeling 2, probeerde de opdracht opnieuw en kreeg:
ERROR: syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
^
BEGIN
COMMIT
Zoals ik al zei, ik kreeg het niet werkend. Ik weet zeker dat er een manier is om die fout te omzeilen, maar ik dacht aan een andere manier en dus gebruikte ik in plaats daarvan deze oplossing (waarvoor een Heroku-account nodig is om je gegevens te hebben en de conversie van sqlite3 naar psql doet met behulp van de Taps-edelsteen (ik geloof):
.Stap 7. in pgAdmin III heb ik een andere database gemaakt. Onder de eigenschappen tab zet ik naam:'ontwikkeling', eigenaar:'AJames' (vervang dit door je eigen Windows gebruikersnaam). En stel onder het tabblad privileges de rol in:'public' en vink de ALL-optie aan (ik dacht dat dit wordt gereset naar niet-aangevinkt, dus ik weet niet zeker of dat nodig is).
.Stap 8. addgem 'pg', '0.11.0'
naar je gem-bestand. U wilt waarschijnlijk ook de:gem 'sqlite3'
. verwijderen op dit punt ook.
.Stap 9. stel database.yml in zoals hier voorgesteld om:
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
Als u aan een open source-project werkt en niet wilt dat uw wachtwoord openbaar wordt gemaakt, bekijk dan enkele van de antwoorden op het veilig verstrekken van het databasewachtwoord in een Rails-app.
.Stap 10. vanaf de opdrachtregel in de hoofdmap van uw rails-app run:rake db:migrate
Hiermee worden het nieuwe schema en alle tabellen in de Postgres-database gemaakt.
.Stap 11. voer heroku db:pull
uit vanaf uw opdrachtregel (opnieuw vanuit de hoofdmap van uw rails-app) om al uw gegevens naar beneden en naar uw nieuwe lege Postgres-database te trekken. Ik denk dat je kraanjuweeltje dit werk op dit moment voor je zal doen.
.Stap 12. Hopelijk is er geen stap 12! ...en het zou nu voor u moeten werken. Gelukkig RoR PostgreSQL-foutopsporing! Gelieve te bewerken, of laat het me weten, als er fouten in staan.
Hier is ook een lijst met aanvullende dingen die interessant/nuttig kunnen zijn:
- Dit is een blogpost over Postgres-wachtwoorden, waar ze voor zijn, waarom je ze nodig hebt, hoe je ze kunt wijzigen, enz.
- Dit, onder 'Een ruimtelijke database maken', is handig voor nieuwelingen om te begrijpen waar pg_hba.conf over gaat en de tweede link die Reno hierboven gaf, onder 'PgAdmin III GUI gebruiken' is handig om te testen of postgres echt werkt , voordat je probeert om het aan te passen aan Rails (d.w.z. probeer een database te maken en er een tabel en wat gegevens in te plaatsen).
- In de enorme maar zeer uitgebreide documentatie van Postgres zou ik beginnen op pagina 58, 'I. bijles'. Dan is er op pdf-pagina 431(!) 'Hoofdstuk 17. Serverconfiguratie en -bediening' die ik ook nuttig vond.