怎样在Ubuntu上安装PostgreSQL数据库

2022年12月21日 | 分类: 【技术】

【安装】

安装PostgreSQL及其开发库:

sudo apt-get install postgresql postgresql-contrib libpq-dev

现在已经安装了PostgreSQL,然后创建一个新的数据库用户,你的Rails应用程序将使用它。

创建PostgreSQL超级用户(可自定义用户名):

sudo - -u postgres createuser -s pguser

如果要为数据库用户设置密码,请使用以下命令进入PostgreSQL控制台:

sudo -u postgres psql

PostgreSQL控制台由postgres=#提示符表示。在PostgreSQL提示符下,输入此命令以设置您创建的数据库用户的密码:

\password pguser

在提示符下输入所需的密码,然后确认。

现在您可以输入以下命令退出PostgreSQL控制台:

\q

尝试创建一个Rails应用程序:

在主目录中创建一个新的Rails应用程序。使用 -d postgresql 选项将 PostgreSQL 设置为数据库,并确保将突出显示的单词替换为您的应用程序名称:

cd ~
rails new appname -d postgresql

然后进入应用程序的目录:

cd appname

配置应用程序的数据库连接:

您创建的PostgreSQL用户将用于创建应用程序的测试和开发数据库。我们需要为您的应用程序配置正确的数据库设置。

在您喜欢的文本编辑器中打开应用程序的数据库配置文件。我们将使用vi:

vi config/database.yml

找到“default: &default”:

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: localhost
  username: pguser
  password: pguser_password

保存并退出。

创建应用程序数据库:

使用此rake命令创建应用程序的development和test数据库:

rake db:create

输出:

Created database 'appname_development'
Created database 'appname_test'

测试配置:

测试应用程序是否能够使用PostgreSQL数据库的最简单方法是尝试运行它。

例如,要运行开发环境(缺省值),请使用以下命令:

rails server

输出:

=> Booting Puma
=> Rails 7.0.4 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.6.5 (ruby 3.0.5-p211) ("Birdie's Version")
*  Min threads: 5
*  Max threads: 5
*  Environment: development
*          PID: 60536
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop

这将在端口3000上的本地主机上启动Rails应用程序。

如果您的Rails应用程序位于远程服务器上,并且您希望通过Web浏览器访问它,则一种简单的方法是将其绑定到服务器的公共IP地址。首先,查找服务器的公共IP地址,然后将其与rails server命令一起使用(将其替换为突出显示的部分):

rails server --binding=server_public_IP

输出:

=> Booting Puma
=> Rails 7.0.4 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.6.5 (ruby 3.0.5-p211) ("Birdie's Version")
*  Min threads: 5
*  Max threads: 5
*  Environment: development
*          PID: 60565
* Listening on http://202.202.202.202:3000
Use Ctrl-C to stop

现在,您应该能够通过端口3000上的服务器公共IP地址在Web浏览器中访问您的Rails应用程序:

访问网络浏览器:

http://server_public_IP:3000

如果您看到“欢迎登陆”Ruby on Rails页面,您的应用程序已正确配置,并连接到PostgreSQL数据库。

Rails version: 7.0.4
Ruby version: ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c5) [x86_64-linux]

【排错】

报错:could not change directory to “/root”

当创建 pguser 时,报错:

could not change directory to "/root": Permission denied

参考:https://blog.csdn.net/qq_41538097/article/details/107353113
参考:https://www.cnblogs.com/bigorang/p/12165261.html
参考:https://serverfault.com/questions/718176/postgres-root-permission-denied

实际上命令已经执行。

There are three parts in the output:
1. could not change directory to “/root”: Permission denied: your ‘sudo’ succeeds but your postgres user fails to access the home of root. You may check for the setting of homedirectory for postgres in /etc/passwd.
2. The files belonging to this database system will be owned by user “postgres”. This user must also own the server process. : This is the normal permissions reminder from initdb. So you know initdb started regardles of failed directory change.
3. initdb: invalid locale settings; check LANG and LC_* environment variables: here initdb fails for real due to missing locale settings.
I think You need to check your sudo configuration and make sure your postgres user has a proper environment before calling initdb.

【参考】

参考:https://cloud.tencent.com/developer/article/1352641
参考:https://cloud.tencent.com/developer/article/1356851