sql >> Databasteknik >  >> RDS >> PostgreSQL

Installation av Postgres på fönster för användning med Ruby-on-Rails

En metod för att installera Postgres på Windows 7 för användning som PostgreSQL-databas för ett rails 3 (3.0.7)-projekt.

Ingress (du kan hoppa över den här biten)

Så det första att påpeka är att Postgres inte bara är ett annat filtillägg än .sqlite3, det är en hel mekanism för att hantera dina databaser. Som sådan har den en klient/server-modell, där du måste ställa in båda för att använda Postgres som databas för din rails-app.

Motivation för att gå igenom avsevärd smärta av Postgres-installationen kontra nästan enkel sqlite-installation:om du distribuerar till Heroku, använder de för närvarande Postgres så några av dina SQL-anrop som är bra på sqlite3 kommer att gå sönder när de används med Postgres. Det är mycket lättare att felsöka postgres lokalt snarare än när det är på Herokus servrar.

Så jag gjorde följande saker:(Ansvarsfriskrivning:Jag kanske har glömt att inkludera några av de saker jag gjorde... det tog mig över 48 timmar av på- och avvärk att få det att fungera... om följande råd inte fungerar Det fungerar inte för dig, då borde den enorma (2300 sidorna!!) men mycket noggranna Postgres-dokumentationen hjälpa. Jag skulle rekommendera att du laddar ner den här ändå om du menar allvar med att använda Postgres eftersom den har mycket material som jag precis har börjat att förstå betydelsen av.)(Andra ansvarsfriskrivning:Jag har nästan säkert brutit mot 20 förnuftiga Postgres-riktlinjer och avslöjat säkerhetshål i Postgres-databasen när jag gjorde det. Om det finns några uppenbara saker som en erfaren Postgres-användare inte håller med om, vänligen redigera mitt inlägg.)

.Steg 1. Ladda ner och installera PostgreSQL v9.0.4-1 härifrån för här sa att endast 9.0.x skulle stödjas på Windows 7. Jag behöll alla standardalternativ och använde bara "hemligt" som lösenord när Postgres-installationsprogrammet uppmanades att göra det (igen inte helt säker på vad konsekvenserna av att dela den informationen på internet är... kommer snart att få reda på det är jag säker på). Du behöver detta lösenord i steg 3.

.Steg 2. Ändra miljövariabler så att Path (för system , inte användare (jag är inte säker på om detta är signifikant eller inte)) är:C:\Program Files\PostgreSQL\9.0\bin
(n.b. Jag använder 64-bitars windows och därför installeras det inte för 32-bitars i 'C:\Program Files (x86)\PostgreS...')

Glöm inte att ändra åtkomsträttigheter till mappen PostgreSQL\9.0 och ta bort alla skrivskyddade standardrättigheter för mappen eller innehållet.(Du kan också behöva starta om din dator för att dessa ska träda i kraft - tack @Gavin -även om det inte är troligt).

.Steg 3. Testa Postgres-installationen genom att försöka skapa en ny databas:Från kommandoraden:createdb -U postgres mydb_as_postgres .Du bör uppmanas att ange lösenordet nu, om du inte gör det kan det vara så att du måste starta servern först (jag kommer inte ihåg om jag behövde göra detta eller inte). Det enklaste sättet är genom pgAdmin III, som borde vara 'pgAdmin3.exe' i en mapp någonstans som C:\Program Files\PostgreSQL\9.0\bin . När du väl har startat pgAdmin III bör det finnas en panel till vänster som heter 'Object Browser'. I denna ska det finnas ett träd med:

Servergrupper> Servrar> PostgreSQL 9.0 (localhost:5432)

Högerklicka på 'PostgreSQL 9.0 (localhost:5432)' och välj 'Anslut'.

createdb -U postgres mydb_as_postgres kommandot bör skapa en ny databas som heter 'mydb_as_postgres' som du kan kontrollera genom att starta pgAdmin III och dubbelklicka på 'PostgreSQL 9.0 (localhost:5432)'. Under denna bör det finnas:

Databases (2) som bör lista 2 databaser som heter mydb_as_postgres och postgres

Jag kallade det _as_postgres eftersom -U postgres en del av kommandot säger till Postgres att skapa databasen med postgres-användaren som dess ägare, vilket du måste ange när du inte är inloggad som postgres-användare. Jag har dock alla mina filer lagrade som "AJames"-användare, så om du är likadan och vill fortsätta utveckla din app när du är inloggad som en annan användare måste du skapa en Postgres "roll" för den användaren nu (se steg 4).

.Steg 4. Genom pgAdmin III. Högerklicka på Logga in roller (som för mig är i):

Objektläsare> Servergrupper> Servrar> PostgreSQL 9.0 (localhost:5432)> Inloggningsroller

Högerklicka på Inloggningsroller och välj 'Ny inloggningsroll...'i Rollnamn, skriv in ditt operativsystems användarnamn, vilket för mig är AJames, och fyll i ditt lösenord under fliken 'Rollprivilegier', jag kontrollerade alla rutorna, men en erfaren postgres-användare skulle sannolikt starkt rekommendera att bara kontrollera "ärver rättigheterna från överordnade roller" och "kan skapa databasobjekt" Men jag är inte en erfaren användare och vill bara felsöka Rails SQL-anrop i Postgres så Jag kollade också "Superanvändare" och "Kan skapa roller", för säkerhets skull.

.Steg 5. Du bör nu kunna skapa en ny databas utan att vara inloggad som postgres-användare. Testa att skriva:

createdb mydb_as_user

Förhoppningsvis borde detta fungera för dig.

.Steg 6. Okej, så du har en development.sqlite3-fil i din rails 'db/'-katalog. Från början tänkte jag ställa in nästa test som att konvertera detta från sqlite3 till psql.
Jag kunde dock inte få det här att fungera men jag lämnade mina försök här eftersom lösningen jag använde krävde att ha data i en Rails-app på Heroku.com (se istället lösningen från steg 7 och framåt). För de som bara har en lokal app och ingen data i Heroku kan de inte använda samma tillvägagångssätt, så de kan behöva utforska något i stil med detta:

x6.1 Testa först 'psql' genom att prova ett kommando från din kommandorad som:

psql mydb_as_user

detta bör visa något som nedan (efter att du har skrivit in ditt lösenord):

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 försök ange:

CREATE TABLE users_table (id integer, "name" text);

Den ska visa:

CREATE TABLE
mydb5=#

Om du checkar in pgAdmin III bör du se tabellen där under:

Objektwebbläsare> Servergrupper> Servrar> PostgreSQL 9.0 (localhost:5432)> Databaser> mydb_as_user> Schema> offentligt> Tabeller> users_table>

x6.3 Okej, nästa försök att konvertera. Laddade ner sqlite-shell förkompilerad binär för Windows.
x6.4 Skapa en ny katalog, jag använde 'C:\temp' och la sqlite3.exe och dina development.sqlite3-filer i den.
x6. 5 Använd följande kommandon (som är härifrån) för att dumpa databasen development.sqlite3 till Postgres.

sqlite3 development .dump | psql development2

du kan få ett felmeddelande som:

psql: FATAL: database "development2" does not exist

x6.6 så jag gick in i pgAdmin III och gjorde en utvecklingsdatabas 2, försökte kommandot igen och fick:

ERROR:  syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
        ^
BEGIN
COMMIT

Som sagt, jag kunde inte få det att fungera. Jag är säker på att det finns ett sätt att komma runt det felet men jag tänkte på ett annat sätt och så jag använde istället den här lösningen (som kräver ett Heroku-konto för att ha dina data och gör omvandlingen från sqlite3 till psql med Taps pärla (I tror):

.Steg 7. i pgAdmin III skapade jag en annan databas. Under egenskapsfliken anger jag namn:'utveckling', ägare:'AJames' (ersätt detta med ditt eget Windows-användarnamn). Och under fliken privilegier, ställ in roll:'public' och markerade alternativet ALLA (trodde att detta återställs till avmarkerat så jag är inte säker på att det är nödvändigt).

.Steg 8. lägg tillgem 'pg', '0.11.0' till din ädelstensfil. Du kommer förmodligen också att vilja ta bort:gem 'sqlite3' även vid denna tidpunkt.

.Steg 9. ställ in database.yml som föreslås här till:

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

Om du arbetar med ett projekt med öppen källkod och inte vill att ditt lösenord ska göras allmänt tillgängligt, ta en titt på några av svaren på att säkert tillhandahålla databaslösenordet i en Rails-app.

.Steg 10. från kommandoraden i din rails-apps rotkatalog kör:rake db:migrate Detta kommer att skapa det nya schemat och alla tabeller i Postgres-databasen.

.Steg 11. kör heroku db:pull från din kommandorad (igen från rotkatalogen i din rails-app) för att dra ner all din data och in i din nya tomma Postgres-databas. Jag tror vid det här laget kommer din kranpärla att göra det här jobbet åt dig.

.Steg 12. Förhoppningsvis finns det inget steg 12! ...och det borde nu fungera för dig. Glad RoR PostgreSQL-felsökning! Vänligen redigera, eller låt mig veta, om det finns några fel i detta.

Här är också en lista över ytterligare saker som kan vara intressanta/användbara:

  • Det här är ett blogginlägg om Postgres-lösenord, vad de är till för, varför du behöver dem, hur man ändrar dem etc.
  • Detta, under 'Skapa en rumslig databas', är användbart för nybörjare att förstå vad pg_hba.conf handlar om och den andra länken som Reno gav ovan, under 'Använda pgAdmin III GUI' är användbar för att testa om postgres faktiskt fungerar , innan du försöker passa in med Rails (dvs. försök skapa en databas och lägga in en tabell och lite data i den).
  • I den enorma men mycket omfattande Postgres-dokumentationen började jag på sidan 58, 'I. handledning'. Sedan på pdf-sidan 431(!) finns 'Kapitel 17. Serverinstallation och drift' som jag också tyckte var användbar.


  1. Oracle Datetime-funktioner (fullständig lista)

  2. Implementering av failover i MS SQL Server 2017 Standard

  3. PDO::PARAM för typ decimal?

  4. PyInstaller, spec-fil, ImportError:Ingen modul med namnet 'blah'