Ein Ansatz zur Installation von Postgres unter Windows 7 zur Verwendung als PostgreSQL-Datenbank für ein Rails 3 (3.0.7)-Projekt.
Präambel (Sie können dieses Bit überspringen)
Als Erstes ist darauf hinzuweisen, dass Postgres nicht nur eine andere Dateierweiterung als .sqlite3 ist, sondern ein vollständiger Mechanismus zum Verwalten Ihrer Datenbanken. Als solches hat es ein Client/Server-Modell, von dem Sie beide einrichten müssen, um Postgres als Datenbank für Ihre Rails-App zu verwenden.
Motivation für die erheblichen Schmerzen beim Postgres-Setup im Vergleich zum fast mühelosen SQLite-Setup:Wenn Sie Heroku bereitstellen, verwenden sie derzeit Postgres, sodass einige Ihrer SQL-Aufrufe, die auf sqlite3 in Ordnung sind, bei Verwendung mit Postgres abbrechen. Es ist viel einfacher, Postgres lokal zu debuggen, als wenn es sich auf den Servern von Heroku befindet.
Also habe ich die folgenden Dinge getan:(Haftungsausschluss:Ich habe möglicherweise vergessen, einige der Dinge, die ich getan habe, einzubeziehen ... es hat mich über 48 Stunden mit Schmerzen gekostet, bis es funktioniert ... wenn der folgende Rat nicht funktioniert Dann funktioniert die riesige (2300 Seiten!!), aber sehr gründliche Postgres-Dokumentation nicht für Sie. Ich würde empfehlen, diese trotzdem herunterzuladen, wenn Sie Postgres ernsthaft verwenden möchten, da sie eine Menge Material enthält, mit dem ich gerade erst begonnen habe um die Bedeutung von zu verstehen.) (Zweiter Haftungsausschluss:Ich habe dabei mit ziemlicher Sicherheit 20 vernünftige Postgres-Richtlinien gebrochen und Sicherheitslücken in der Postgres-Datenbank aufgedeckt. Wenn es offensichtliche Dinge gibt, mit denen ein erfahrener Postgres-Benutzer nicht einverstanden ist, bearbeiten Sie bitte meinen Beitrag.)
.Schritt 1. Laden Sie PostgreSQL v9.0.4-1 von hier herunter und installieren Sie es, da hier gesagt wurde, dass nur 9.0.x unter Windows 7 unterstützt wird. Ich habe alle Standardoptionen beibehalten und nur „geheim“ als Passwort verwendet, als das Postgres-Installationsprogramm dazu aufgefordert wurde (wieder Ich bin mir nicht ganz sicher, welche Konsequenzen das Teilen dieser Informationen im Internet hat ... ich werde es bald herausfinden, da bin ich mir sicher). Sie benötigen dieses Passwort in Schritt 3.
.Schritt 2. Ändern Sie die Umgebungsvariablen so, dass Path (for system , nicht Benutzer (ich bin mir nicht sicher, ob dies von Bedeutung ist oder nicht)) ist:C:\Program Files\PostgreSQL\9.0\bin
(Hinweis:Ich verwende 64-Bit-Windows, daher wird es nicht für 32-Bit in 'C:\Program Files (x86)\PostgreS...' installiert)
Vergessen Sie nicht, die Zugriffsrechte auf den Ordner PostgreSQL\9.0 zu ändern und alle standardmäßigen Nur-Lese-Rechte für den Ordner oder Inhalt zu entfernen /P>
.Schritt 3. Testen Sie die Postgres-Installation, indem Sie versuchen, eine neue Datenbank zu erstellen:Über die Befehlszeile:createdb -U postgres mydb_as_postgres
.Sie sollten jetzt aufgefordert werden, das Passwort einzugeben, wenn Sie es nicht sind, müssen Sie möglicherweise zuerst den Server starten (ich kann mich nicht erinnern, ob ich das tun musste oder nicht). Der einfachste Weg ist über pgAdmin III, das 'pgAdmin3.exe' in einem Ordner irgendwo wie C:\Program Files\PostgreSQL\9.0\bin
sein sollte . Sobald Sie pgAdmin III gestartet haben, sollte sich auf der linken Seite ein Panel mit dem Namen „Object Browser“ befinden. Darin sollte ein Baum stehen mit:
Servergruppen> Server> PostgreSQL 9.0 (localhost:5432)
Klicken Sie mit der rechten Maustaste auf „PostgreSQL 9.0 (localhost:5432)“ und wählen Sie „Verbinden“ aus.
Der createdb -U postgres mydb_as_postgres
sollte eine neue Datenbank namens „mydb_as_postgres“ erstellen, die Sie überprüfen können, indem Sie pgAdmin III starten und auf „PostgreSQL 9.0 (localhost:5432)“ doppelklicken. Darunter sollte stehen:
Databases (2)
die 2 Datenbanken namens mydb_as_postgres
auflisten sollte und postgres
Ich habe es _as_postgres
genannt weil das -U postgres
Ein Teil des Befehls weist Postgres an, die Datenbank mit dem Postgres-Benutzer als Besitzer zu erstellen, den Sie angeben müssen, wenn Sie nicht als Postgres-Benutzer angemeldet sind. Ich habe jedoch alle meine Dateien als „AJames“-Benutzer gespeichert. Wenn Sie also derselbe sind und Ihre App weiter entwickeln möchten, wenn Sie als ein anderer Benutzer angemeldet sind, müssen Sie jetzt eine Postgres-„Rolle“ für diesen Benutzer erstellen (siehe Schritt 4).
.Schritt 4. Über pgAdmin III. Klicken Sie mit der rechten Maustaste auf Anmelderollen (was für mich in ist):
Objektbrowser> Servergruppen> Server> PostgreSQL 9.0 (localhost:5432)> Anmelderollen
Klicken Sie mit der rechten Maustaste auf Login Roles und wählen Sie 'New Login Role...' in Role name, geben Sie Ihren Betriebssystem-Benutzernamen ein, der für mich AJames ist, und geben Sie Ihr Passwort auf der Registerkarte 'Role Privileges' ein, ich habe alles überprüft die Kästchen, aber ein erfahrener Postgres-Benutzer würde wahrscheinlich dringend empfehlen, nur die 'erbt Rechte von übergeordneten Rollen' und die 'kann Datenbankobjekte erstellen' zu aktivieren. Aber ich bin kein erfahrener Benutzer und möchte nur Rails-SQL-Aufrufe in Postgres so debuggen Ich habe auch 'Superuser' und 'Kann Rollen erstellen' überprüft, nur für den Fall.
.Schritt 5. Sie sollten jetzt in der Lage sein, eine neue Datenbank zu erstellen, ohne als Postgres-Benutzer angemeldet zu sein. Versuchen Sie Folgendes einzugeben:
createdb mydb_as_user
Hoffentlich sollte dies für Sie funktionieren.
.Schritt 6. Okay, Sie haben also eine development.sqlite3-Datei in Ihrem Rails-'db/'-Verzeichnis. Ursprünglich wollte ich den nächsten Test als Konvertierung von sqlite3 in psql festlegen.
Ich konnte das zwar nicht zum Laufen bringen, aber ich habe meine Versuche hier gelassen, da die von mir verwendete Lösung erforderte, dass die Daten in einer Rails-App aktiviert waren Heroku.com (siehe stattdessen die Lösung ab Schritt 7). Für diejenigen, die nur eine lokale App und keine Daten in Heroku haben, können sie nicht den gleichen Ansatz verwenden, also müssen sie vielleicht so etwas untersuchen:
x6.1 Testen Sie zuerst 'psql', indem Sie einen Befehl von Ihrer Befehlszeile aus versuchen wie:
psql mydb_as_user
Dies sollte so etwas wie das Folgende anzeigen (nachdem Sie Ihr Passwort eingegeben haben):
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 versuchen Sie Folgendes einzugeben:
CREATE TABLE users_table (id integer, "name" text);
Es sollte Folgendes anzeigen:
CREATE TABLE
mydb5=#
Wenn Sie pgAdmin III einchecken, sollten Sie die Tabelle dort sehen unter:
Objektbrowser> Servergruppen> Server> PostgreSQL 9.0 (localhost:5432)> Datenbanken> mydb_as_user> Schemas> public> Tables> users_table>
x6.3 Okay, als nächstes versuchen Sie die Konvertierung. Heruntergeladene vorkompilierte SQLite-Shell-Binärdatei für Windows.
x6.4 Erstellen Sie ein neues Verzeichnis, ich habe 'C:\temp' verwendet und die sqlite3.exe und Ihre development.sqlite3-Dateien darin abgelegt.
x6. 5 Verwenden Sie die folgenden Befehle (die von hier stammen), um die Datenbank development.sqlite3 in Postgres zu sichern.
sqlite3 development .dump | psql development2
Möglicherweise erhalten Sie eine Fehlermeldung wie:
psql: FATAL: database "development2" does not exist
x6.6, also ging ich in pgAdmin III und erstellte eine Datenbank für Entwicklung 2, versuchte den Befehl erneut und bekam:
ERROR: syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
^
BEGIN
COMMIT
Wie gesagt, ich konnte es nicht zum Laufen bringen. Ich bin mir sicher, dass es einen Weg gibt, diesen Fehler zu umgehen, aber ich dachte an einen anderen Weg und habe stattdessen diese Lösung verwendet (die ein Heroku-Konto benötigt, um Ihre Daten zu haben, und die Konvertierung von sqlite3 zu psql mit dem Taps-Gem (I glauben):
.Schritt 7. in pgAdmin III habe ich eine weitere Datenbank erstellt. Unter dem Eigenschaften-Tab habe ich Name:'development', Owner:'AJames' eingestellt (ersetzen Sie dies durch Ihren eigenen Windows-Benutzernamen). Und unter der Registerkarte „Privilegien“ legen Sie Rolle:„öffentlich“ fest und aktivieren die Option „ALLE“ (dachte, dies wird auf „nicht aktiviert“ zurückgesetzt, daher bin ich mir nicht sicher, ob das notwendig ist).
.Schritt 8. addgem 'pg', '0.11.0'
zu Ihrer Gem-Datei. Sie werden wahrscheinlich auch Folgendes entfernen wollen:gem 'sqlite3'
auch an dieser Stelle.
.Schritt 9. setze database.yml wie hier vorgeschlagen auf:
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
Wenn Sie an einem Open-Source-Projekt arbeiten und nicht möchten, dass Ihr Passwort öffentlich zugänglich gemacht wird, sehen Sie sich einige der Antworten auf Sicheres Bereitstellen des Datenbankpassworts in einer Rails-App an.
.Schritt 10. Führen Sie über die Befehlszeile im Stammverzeichnis Ihrer Rails-App Folgendes aus:rake db:migrate
Dadurch werden das neue Schema und alle Tabellen in der Postgres-Datenbank erstellt.
.Schritt 11. Führen Sie heroku db:pull
aus von Ihrer Befehlszeile (wieder aus dem Stammverzeichnis Ihrer Rails-App), um alle Ihre Daten nach unten und in Ihre neue leere Postgres-Datenbank zu ziehen. Ich denke, an diesem Punkt wird Ihr Taps Gem diese Arbeit für Sie erledigen.
.Schritt 12. Hoffentlich gibt es keinen Schritt 12! ...und es sollte jetzt für Sie funktionieren. Viel Spaß beim RoR-PostgreSQL-Debugging! Bitte bearbeiten Sie, oder teilen Sie mir mit, wenn darin Fehler enthalten sind.
Außerdem ist hier eine Liste mit zusätzlichen Dingen, die interessant/nützlich sein könnten:
- Dies ist ein Blogbeitrag über Postgres-Passwörter, wofür sie sind, warum Sie sie brauchen, wie man sie ändert usw.
- Dies unter 'Erstellen einer räumlichen Datenbank' ist nützlich für Neulinge, um zu verstehen, worum es bei pg_hba.conf geht, und der zweite Link, den Reno oben gegeben hat, unter 'Using pgAdmin III GUI' ist nützlich, um zu testen, ob Postgres tatsächlich funktioniert , bevor Sie versuchen, es mit Rails anzupassen (d. h. versuchen Sie, eine Datenbank zu erstellen und eine Tabelle und einige Daten darin abzulegen).
- In der riesigen, aber sehr umfassenden Postgres-Dokumentation würde ich auf Seite 58 beginnen:„I. Lernprogramm'. Dann gibt es auf pdf Seite 431(!) 'Kapitel 17. Servereinrichtung und -betrieb', das ich auch nützlich fand.