PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Инсталиране на Postgres на Windows за използване с Ruby-on-Rails

Подход за инсталиране на Postgres на Windows 7 за използване като PostgreSQL база данни за проект на rails 3 (3.0.7).

Преамбюл (можете да пропуснете този бит)

Така че първото нещо, което трябва да се отбележи, е, че Postgres не е просто различно файлово разширение от .sqlite3, това е цял механизъм за управление на вашите бази данни. Като такъв той има модел клиент/сървър, от който ще трябва да настроите и двата, за да използвате Postgres като база данни за вашето rails приложение.

Мотивация за преминаване през значителна болка от настройката на Postgres в сравнение с почти безпроблемна настройка на sqlite:ако внедрявате в Heroku, в момента те използват Postgres, така че някои от вашите SQL извиквания, които са добри в sqlite3, ще се счупят, когато се използват с Postgres. Много по-лесно е да се отстраняват грешки в postgres локално, отколкото когато е на сървърите на Heroku.

Така че направих следните неща:(Отказ от отговорност:може да съм забравил да включа някои от нещата, които направих... отне ми над 48 часа включване и изключване на болка, за да го накарам да заработи... ако следният съвет не работи не работи за вас, тогава огромната (2300 страници!!), но много задълбочена документация на Postgres би трябвало да помогне. Все пак бих препоръчал да изтеглите това, ако сте сериозни за използването на Postgres, тъй като има много материал, който току-що започнах за да разбера значението на.) (Втора отказ от отговорност:почти сигурно съм нарушил 20 разумни указания на Postgres и съм разкрил дупки в сигурността в базата данни на Postgres, докато го правя. Ако има някакви очевидни неща, с които опитен потребител на Postgres не е съгласен, моля, редактирайте публикацията ми.)

.Стъпка 1. Изтеглете и инсталирайте PostgreSQL v9.0.4-1 от тук, защото тук се казва, че само 9.0.x ще се поддържа на Windows 7. Запазих всички опции по подразбиране и просто използвах „secret“ като парола, когато бъдете подканени от инсталатора на Postgres за една (отново не съм напълно сигурен какви са последствията от споделянето на тази информация в интернет... скоро ще разбера, сигурен съм). Ще ви трябва тази парола в стъпка 3.

.Стъпка 2. Променете променливите на средата, така че Път (за система , не потребител (не съм сигурен дали това е важно или не)) е:C:\Program Files\PostgreSQL\9.0\bin
(n.b. аз съм на 64-битов Windows, следователно не се инсталира за 32-битов в „C:\Program Files (x86)\PostgreS...“)

Не забравяйте да промените правата за достъп до папката PostgreSQL\9.0 и да премахнете всички права само за четене по подразбиране върху папката или съдържанието. (Може да се наложи също да рестартирате компютъра си, за да влязат в сила - благодаря @Gavin - макар и малко вероятно).

.Стъпка 3. Тествайте инсталацията на Postgres, като се опитате да създадете нова база данни:От командния ред:createdb -U postgres mydb_as_postgres .Трябва да бъдете подканени да въведете паролата сега, ако не сте, може да се окаже, че първо трябва да стартирате сървъра (не мога да си спомня дали трябваше да направя това или не). Най-лесният начин е чрез pgAdmin III, който трябва да бъде 'pgAdmin3.exe' в папка някъде като C:\Program Files\PostgreSQL\9.0\bin . След като стартирате pgAdmin III, вляво трябва да има панел, наречен 'Object Browser'. В това трябва да има дърво с:

Групи сървъри> Сървъри> PostgreSQL 9.0 (localhost:5432)

Щракнете с десния бутон върху „PostgreSQL 9.0 (localhost:5432)“ и изберете „Свързване“.

createdb -U postgres mydb_as_postgres командата трябва да създаде нова база данни, наречена 'mydb_as_postgres', която можете да проверите, като задействате pgAdmin III и щракнете двукратно върху 'PostgreSQL 9.0 (localhost:5432)'. Под това трябва да има:

Databases (2) който трябва да изброява 2 бази данни, наречени mydb_as_postgres и postgres

Нарекох го _as_postgres защото -U postgres част от командата казва на Postgres да създаде базата данни с потребителя на postgres като собственик, което трябва да посочите, когато не сте влезли като потребител на postgres. Имам всичките си файлове, съхранени като потребител на „AJames“, така че ако сте същият и искате да продължите да разработвате приложението си, когато сте влезли като друг потребител, трябва да създадете „роля“ на Postgres за този потребител сега (вижте стъпката 4).

.Стъпка 4. Чрез pgAdmin III. Щракнете с десния бутон върху Роли за влизане (което за мен е в):

Браузър на обекти> Групи сървъри> Сървъри> PostgreSQL 9.0 (localhost:5432)> Роли за влизане

Щракнете с десния бутон върху Роли за влизане и изберете „Нова роля за влизане...“ в Име на ролята, поставете потребителското име на вашата операционна система, което за мен е AJames, и попълнете паролата си в раздела „Привилегии на ролята“, проверих всички полетата, но опитен потребител на postgres вероятно силно би препоръчал да се проверяват само „наследява правата от родителски роли“ и „може да създава обекти на база данни“ Но аз не съм опитен потребител и просто искам да отстранявам грешки в Rails SQL извиквания в Postgres, така че Проверих и „Суперпотребител“ и „Може да създава роли“, за всеки случай.

.Стъпка 5. Вече трябва да можете да създавате нова база данни, без да сте влезли като потребител на postgres. Опитайте да напишете:

createdb mydb_as_user

Надяваме се, че това трябва да работи за вас.

.Стъпка 6. Добре, значи имате файл development.sqlite3 в директорията на rails 'db/'. Първоначално щях да задам следващия тест като преобразуване на това от sqlite3 в psql.
Не можах да накарам това да работи, но оставих опитите си тук, тъй като решението, което използвах, изискваше данните в Rails приложение на Heroku.com (виж вместо това решението от стъпка 7 нататък). За тези, които имат само локално приложение и нямат данни в Heroku, те не могат да използват същия подход, така че може да се наложи да проучат нещо подобно:

x6.1 Първо, тествайте 'psql', като изпробвате команда от командния ред като:

psql mydb_as_user

това трябва да покаже нещо като по-долу (след като сте въвели паролата си):

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 опитайте да въведете:

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

Трябва да се покаже:

CREATE TABLE
mydb5=#

Ако проверите в pgAdmin III, трябва да видите таблицата там под:

Браузър на обекти> Групи сървъри> Сървъри> PostgreSQL 9.0 (localhost:5432)> Бази данни> mydb_as_user> Схеми> публични> Таблици> таблица_потребители>

x6.3 Добре, след това опитайте преобразуването. Изтеглих предварително компилиран двоичен файл sqlite-shell за windows.
x6.4 Създайте нова директория, използвах 'C:\temp' и поставих sqlite3.exe и вашите development.sqlite3 файлове в нея.
x6. 5 Използвайте следните команди (които са от тук), за да изхвърлите базата данни development.sqlite3 в Postgres.

sqlite3 development .dump | psql development2

може да получите грешка като:

psql: FATAL: database "development2" does not exist

x6.6 така че влязох в pgAdmin III и направих база данни за разработка 2, опитах командата отново и получих:

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

Както казах, не можах да го накарам да работи. Сигурен съм, че има начин да заобиколя тази грешка, но се сетих за различен начин и вместо това използвах това решение (което изисква акаунт в Heroku, за да има вашите данни и извършва преобразуването от sqlite3 в psql с помощта на Taps gem (аз вярвам):

.Стъпка 7. в pgAdmin III създадох друга база данни. В раздела със свойства задавам име:'development', собственик:'AJames' (заменете това с вашето собствено потребителско име на Windows). И в раздела с привилегии задайте роля:'public' и отметнете опцията ВСИЧКИ (мислих, че това се нулира до без отметка, така че не съм сигурен, че е необходимо).

.Стъпка 8. addgem 'pg', '0.11.0' към вашия gem файл. Вероятно ще искате да премахнете и:gem 'sqlite3' и в този момент.

.Стъпка 9. задайте database.yml, както е предложено тук на:

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

Ако работите по проект с отворен код и не искате паролата ви да бъде публично достъпна, вижте някои от отговорите на Сигурно предоставяне на паролата за база данни в приложение на Rails.

.Стъпка 10. от командния ред в основната директория на приложението Rails изпълнете:rake db:migrate Това ще създаде новата схема и всички таблици в базата данни на Postgres.

.Стъпка 11. стартирайте heroku db:pull от вашия команден ред (отново от главната директория на вашето rails приложение), за да изтеглите всичките си данни надолу и във вашата нова празна база данни Postgres. Мисля, че в този момент вашият скъпоценен камък ще свърши тази работа вместо вас.

.Стъпка 12. Дано няма стъпка 12! ...и сега би трябвало да работи за вас. Честито отстраняване на грешки в RoR PostgreSQL! Моля, редактирайте или ме уведомете, ако има някакви грешки в това.

Също така, ето списък с допълнителни неща, които може да са интересни/полезни:

  • Това е публикация в блога за паролите на Postgres, за какво са те, защо са ви необходими, как да ги промените и т.н.
  • Това под „Създаване на пространствена база данни“ е полезно за начинаещи, за да разберат за какво е pg_hba.conf и втората връзка, която Reno даде по-горе, под „Използване на pgAdmin III GUI“ е полезна за тестване, за да се види дали postgres наистина работи , преди да се опитате да го настроите с Rails (т.е. опитайте да създадете база данни и да поставите таблица и някои данни в нея).
  • В огромната, но много изчерпателна документация на Postgres, бих започнал на страница 58, „I. урок“. След това на pdf страница 431(!) има „Глава 17. Настройка и работа на сървъра“, която също намерих за полезна.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails:Отказано е разрешение на Postgres за създаване на база данни на rake db:create:all

  2. Не може да се намери входна точка с име 'InterlockedIncrement' в DLL 'kernel32.dll' - [имейл защитен] 64 бита

  3. Преобразувайте номера на месеца в име на месеца в PostgreSQL

  4. Динамична централна заявка с помощта на PostgreSQL 9.3

  5. Postgresql SQL GROUP BY интервал от време с произволна точност (до мили секунди)