一种在 Windows 7 上安装 Postgres 的方法,用作 Rails 3 (3.0.7) 项目的 PostgreSQL 数据库。
Preamble(你可以跳过这一点)
因此,首先要指出的是,Postgres 不仅仅是与 .sqlite3 不同的文件扩展名,它还是管理数据库的完整机制。因此,它具有客户端/服务器模型,您需要对其进行设置才能使用 Postgres 作为 Rails 应用程序的数据库。
经历相当痛苦的 Postgres 设置与几乎毫不费力的 sqlite 设置的动机:如果您要部署到 Heroku,他们当前正在使用 Postgres,因此一些在 sqlite3 上正常的 SQL 调用在与 Postgres 一起使用时会中断。在本地调试 postgres 比在 Heroku 的服务器上调试要容易得多。
所以我做了以下事情:
(免责声明:我可能忘记了包括我所做的一些事情......我花了超过 48 小时的断断续续的痛苦才让它发挥作用......如果以下建议对你不起作用,那么巨大的(2300页!!)但是非常详尽的 Postgres 文档 http://www.postgresql.org/docs/manuals/应该有帮助。如果你真的想使用 Postgres,我建议你下载这个,因为它有很多我才刚刚开始理解其重要性的材料。)
(第二个免责声明:我几乎肯定违反了 20 条合理的 Postgres 准则,并在这样做的同时暴露了 Postgres 数据库中的安全漏洞。如果有经验的 Postgres 用户不同意任何明显的事情,请编辑我的帖子。)
.Step 1.下载并安装 PostgreSQL v9.0.4-1 从here http://www.enterprisedb.com/products-services-training/pgdownload#windows因为here http://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows#What_versions_of_Windows_does_PostgreSQL_run_on.3F说 Windows 7 上只支持 9.0.x。我保留了所有默认选项,只是在 Postgres 安装程序提示时使用“secret”作为密码(同样不完全确定在互联网上共享该信息的后果是什么)是......很快就会发现我确信)。您将在第 3 步中需要此密码。
.Step 2.更改环境变量,使 Path (对于系统,不是用户 http://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows#How_do_I_set_an_environment_variable.3F(我不确定这是否重要))是:C:\Program Files\PostgreSQL\9.0\bin
(注意:我使用的是 64 位 Windows,因此它没有安装在 'C:\Program Files (x86)\PostgreS...' 中的 32 位版本
不要忘记更改文件夹 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)”并选择“连接”。
The createdb -U postgres mydb_as_postgres
命令应该创建一个名为“mydb_as_postgres”的新数据库,您可以通过启动 pgAdmin III 并双击“PostgreSQL 9.0 (localhost:5432)”来检查该数据库。在此之下应该有:
Databases (2)
其中应该列出 2 个名为mydb_as_postgres
and postgres
我叫它_as_postgres
因为-U postgres
该命令的一部分告诉 Postgres 以 postgres 用户作为所有者来创建数据库,当您没有以 postgres 用户身份登录时,您需要指定该数据库。我将所有文件存储为“AJames”用户,因此,如果您是同一个人,并且希望在以其他用户身份登录时继续开发应用程序,您现在需要为该用户创建一个 Postgres“角色”(请参阅步骤4).
.Step 4.通过 pgAdmin III。右键单击登录角色(对我来说是):
对象浏览器 > 服务器组 > 服务器 > PostgreSQL 9.0 (localhost:5432) > 登录角色
右键单击登录角色并选择“新建登录角色...”
在角色名称中,输入您的操作系统用户名,对我来说是 AJames,
并在“角色权限”选项卡下填写您的密码,我选中了所有复选框,但经验丰富的 postgres 用户可能会强烈建议仅选中“从父角色继承权限”和“可以创建数据库对象”,但是我'我不是一个有经验的用户,只是想在 Postgres 中调试 Rails SQL 调用,所以我还检查了“超级用户”和“可以创建角色”,以防万一。
.Step 5.您现在应该能够创建新数据库,而无需以 postgres 用户身份登录。尝试输入:
createdb mydb_as_user
希望这对你有用。
.Step 6.好的,您的 Rails 'db/' 目录中已经有了一个development.sqlite3 文件。最初我打算将下一个测试设置为将其从 sqlite3 转换为 psql。
虽然我无法让它工作,但我在这里留下了我的尝试,因为我使用的解决方案需要在 Heroku.com 上的 Rails 应用程序中包含数据(请参阅第 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 > 模式 > 公共 > 表 > users_table >
x6.3 好的,接下来尝试一下转换。下载的sqlite-shell http://www.sqlite.org/download.htmlWindows 的预编译二进制文件。
x6.4 创建一个新目录,我使用“C:\temp”并将 sqlite3.exe 和development.sqlite3 文件放入其中。
x6.5 使用以下命令(来自here http://www.sqlite.org/sqlite.html)将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 帐户来保存您的数据,并使用 Taps gem 将 sqlite3 转换为 psql (我相信):
.Step 7.在 pgAdmin III 中我创建了另一个数据库。在属性选项卡下,我设置名称:“development”,所有者:“AJames”(将其替换为您自己的 Windows 用户名)。在“权限”选项卡下,设置角色:“公共”并选中“全部”选项(认为这会重置为未选中状态,所以我不确定是否有必要)。
.Step 8. add
gem 'pg', '0.11.0'
到你的 gem 文件。您可能还想删除:gem 'sqlite3'
也在这一点上。
.Step 9.将database.yml设置为在这里建议 http://www.ruby-forum.com/topic/132541 to:
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 应用程序中安全地提供数据库密码 https://stackoverflow.com/questions/17151324/securely-providing-the-database-password-in-a-rails-app.
.步骤10。从 Rails 应用程序根目录中的命令行运行:rake db:migrate
这将在 Postgres 数据库中创建新架构和所有表。
.步骤11。 run heroku db:pull
从命令行(同样是在 Rails 应用程序的根目录中)将所有数据拉下来并放入新的空 Postgres 数据库中。我认为此时您的水龙头宝石将为您完成这项工作。
.步骤12。希望没有第12步! ...它现在应该对你有用了。快乐 RoR PostgreSQL 调试!如果其中有任何错误,请编辑或告诉我。
另外,这里列出了可能有趣/有用的其他内容:
- 这是一个关于 Postgres 密码的博客文章 http://pgsnake.blogspot.com/2010/07/postgresql-passwords-and-installers.html,它们的用途,
为什么需要它们,如何更改它们等。
-
这在“创建空间数据库”下对于新手来说非常有用
了解 pg_hba.conf 的含义 http://www.bostongis.com/PrinterFriendly.aspx?content_name=postgis_tut01 and 第二个链接
雷诺在上面给出了 https://help.ubuntu.com/community/PostgreSQL,在“使用 pgAdmin III GUI”下对于
在尝试安装之前测试一下 postgres 是否真正工作
它与Rails(即尝试创建一个数据库并放置一个表和
一些数据)。
- In the 庞大但非常全面的 Postgres 文档 http://www.postgresql.org/docs/manuals/, ID
从第 58 页开始,“I.教程'。然后在 pdf 第 431 页(!)上有
我也发现“第 17 章服务器设置和操作”很有用。