📅  最后修改于: 2023-12-03 15:24:21.444000             🧑  作者: Mango
PostgreSQL 是一种功能丰富、开源的 SQL 数据库管理系统,它是许多企业级应用程序的首选数据库。在 Rails 应用中使用 PostgreSQL 作为数据存储方式,可以获得更高的性能、更好的可扩展性、更好的稳定性和更高的数据安全性。
在使用 PostgreSQL 之前,您需要在本地计算机上安装它。您可以从 PostgreSQL 官网 下载最新版本的 Postgres。
使用以下命令创建一个新的 Rails 应用程序:
rails new myapp --database=postgresql
此命令将创建一个名为 “myapp” 的新应用程序,并将默认数据库设置为 PostgreSQL。
在默认情况下,Rails 应用程序将使用 SQLite 作为开发数据库。因此,在使用 PostgreSQL 之前,您需要更新数据库设置以连接到 PostgreSQL 数据库。
在 Rails 应用程序中,数据库连接设置存储在 config/database.yml
文件中。打开该文件,并将以下代码添加到 database.yml
文件中:
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
host: localhost
username: <%= ENV['POSTGRES_USER'] %>
password: <%= ENV['POSTGRES_PASSWORD'] %>
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
在上面的代码中,host
是连接到 Postgres 数据库的主机名,它默认为本地主机。username
和 password
表示连接 PostgreSQL 数据库时使用的用户名和密码。在此处,我使用环境变量 POSTGRES_USER
和 POSTGRES_PASSWORD
来保存用户名和密码。
如果您的 PostgreSQL 安装在远程服务器上,则需要将 host
更改为您服务器的 IP 地址或域名,并使用正确的用户名和密码。
在连接到 Postgres 数据库之前,您需要创建一个新的数据库。您可以使用以下命令在 PostgreSQL 中创建一个新的数据库:
createdb myapp_development
执行此命令后,将在 PostgreSQL 中创建一个名为 “myapp_development” 的新数据库。请确保使用正确的数据库名称。
在更新了数据库设置并创建了 PgSQL 数据库之后,我们可以使用以下命令测试数据库的连接:
rails db:migrate
这将运行 pending 的数据库迁移(migration)并更新数据库模式。如果您能够成功地执行此命令,则表示您已成功连接到 PostgreSQL 数据库。
在使用 PostgreSQL 数据库之前,您需要使用 Active Record 模型创建相应的表。在 Rails 应用程序中,您可以使用以下命令创建一个新的模型:
rails generate model User name:string email:string
这涉及到生成一个名为 User
的新模型,并为其添加两个属性 name
和 email
。
然后,您可以使用以下命令将模型的迁移应用到数据库中:
rails db:migrate
运行此命令后,将在 PostgreSQL 中创建一个名为 “users” 的新表。
现在,您可以使用 ActiveRecord 模型访问数据。以下是一些基本的操作:
# 创建新的用户
User.create(name: 'John', email: 'john@example.com')
# 查找第一个用户
User.find(1)
# 更新用户信息
user = User.find(1)
user.update(name: 'Mary')
# 删除用户
user = User.find(1)
user.destroy
在本文中,我们介绍了如何在 Rails 应用中实现 PostgreSQL 数据库。我们提供了一些基本步骤和操作,以帮助您开始使用 PostgreSQL 作为您的应用程序的主要数据存储方式。如果您想了解更多细节和深入探索 PostgreSQL 的功能和用法,请访问 PostgreSQL 官方网站。