Подход к установке 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, отредактируйте мой пост.)
.Step 1. Загрузите и установите PostgreSQLv9.0.4-1 из здесь , потому что здесь говорит, что только 9.0.x будет поддерживаться в Windows 7. Iсохранил все параметры по умолчанию и просто использовал «секретный» в качестве пароля при запросе установщиком Postgres для одного (опять же, не совсем уверен, каковы последствия обмена этой информацией в Интернете ... скоро я узнаю, я уверен),Этот пароль понадобится вам на шаге 3.
.Step 2. Измените переменные среды так, чтобы Path ( для системы , а не для пользователя (Я не уверен, важно это или нет)): C:\Program Files\PostgreSQL\9.0\bin
(примечание: я нахожусь на 64-битных окнах, поэтому он не устанавливается для 32-битных в C: \ Program Files (x86)) \ PostgreS ... ')
Не забудьте изменить права доступа к папке PostgreSQL \ 9.0 и удалить все права по умолчанию на чтение папки или содержимого.(Вам также может понадобиться перезагрузить компьютер, чтобы они вступили в силу - спасибо @Gavin - хотя вряд ли).
.Step 3. Протестируйте установку Postgres, пытаясь создать новую базу данных.: Из командной строки: createdb -U postgres mydb_as_postgres
.Вам нужно будет ввести пароль сейчас, если нет, возможно, вам сначала нужно запустить сервер (я не могу вспомнить, нужно ли мне это делать или нет).Самый простой способ - через pgAdmin III, который должен быть «pgAdmin3.exe» в папке где-то вроде C:\Program Files\PostgreSQL\9.0\bin
.После запуска pgAdmin III слева должна появиться панель «Браузер объектов».В этом должно быть дерево с:
Группы серверов> Серверы> PostgreSQL 9.0 (localhost: 5432)
Щелкните правой кнопкой мыши «PostgreSQL 9.0 (localhost: 5432)» и выберите «Connect».
Команда 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, вероятно, настоятельно рекомендует проверять только «наследует права от родительских ролей» и «может создавать объекты базы данных», но я » Я не опытный пользователь и просто хочу отлаживать SQL-вызовы Rails в Postgres, поэтому я также проверил «Суперпользователь» и «Может создавать роли», на всякий случай.
.Step 5. Теперь вы сможете создавать новую базу данных, не входя в систему как пользователь postgres. Попробуйте набрать:
createdb mydb_as_user
Надеюсь, это сработает для вас.
.Step 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> Схемы> public> Таблицы> users_table>
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 (I верить):
.Step 7. в pgAdmin III Я создал другую базу данных. На вкладке свойств я устанавливаю имя: «разработка», владелец: «AJames» (замените его своим собственным именем пользователя Windows). А на вкладке привилегий установите роль: public и отметьте опцию ALL (думал, что это сбрасывается на непроверенную, поэтому я не уверен, что это необходимо).
. Шаг 8. добавить
gem 'pg', '0.11.0'
в ваш файл драгоценного камня. Возможно, вы также захотите удалить:
gem 'sqlite3'
в этот момент тоже.
.Step 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 .
.Step 10. из командной строки в корневом каталоге вашего приложения rails запустите:
rake db:migrate
Это создаст новую схему и все таблицы в базе данных Postgres.
.Step 11. запустите heroku db:pull
из командной строки (снова из корневого каталога вашего rails-приложения), чтобы перенести все ваши данные в новую пустую базу данных Postgres. Я думаю, что в этот момент ваш жетон будет делать эту работу за вас.
.Step 12. Надеюсь, что нет шага 12! ... и теперь он должен работать на вас. Счастливая отладка RoR PostgreSQL! Пожалуйста, измените или дайте мне знать, если есть какие-либо ошибки в этом.
Кроме того, вот список дополнительных вещей, которые могут быть интересны / полезны:
- Это сообщение в блоге о паролях Postgres , для чего они нужны,
зачем они нужны, как их менять и т. д.
- Это в разделе «Создание пространственной базы данных» полезно для новичков в
понять, что такое pg_hba.conf о и второй ссылке, которая
Рено дал выше , под «Использование графического интерфейса pgAdmin III» полезно для
тестирование, чтобы увидеть, действительно ли Postgres работает, прежде чем пытаться соответствовать
это с помощью Rails (то есть попробуйте создать базу данных и поставить таблицу и
некоторые данные в него).
- В огромной, но очень полной документации Postgres я бы
начать на странице 58, «я» руководство'. Тогда на странице PDF 431 (!) Есть
«Глава 17. Настройка и работа сервера», которую я также нашел полезным.