连接PostgreSQL到Rails所需的知识

概述

我原本想使用PostgreSQL作为Rails的数据库,但我遇到了很多困难,所以我会留下我认为有用的部分。
主要是对命令的解释。
关于与Rails的连接步骤,有一篇详细的文章,请参考那篇文章(参考部分有链接)。
我并没有好好学习,所以有些部分我还没理解。
如果有错误,请指出。

环境

macOS Catalina
Ruby:2.7.1
Rails:6.0.2.2
PostgreSQL:12.2
Homebrew 2.2.14

macOS Catalina
Ruby版本:2.7.1
Rails版本:6.0.2.2
PostgreSQL版本:12.2
Homebrew版本:2.2.14

PostgreSQL的安装

由于需要在启动PostgreSQL的情况下连接Rails,所以需要进行安装。
这里使用Homebrew来安装。

$ brew install postgresql

$ postgres --version
postgres (PostgreSQL) 12.2

设定PATH

# PostgreSQLのパス
export PATH=/usr/local/pgsql/bin:$PATH

# PostgreSQL設定(DBの置き場所)
export PGDATA='/usr/local/var/postgres'

注意:我参考了开发组的文档来设置密码,但说实话,我不确定它是否正确通行或是否必要…

$  which postgres
/usr/local/bin/postgres

$  echo $PATH
/usr/local/pgsql/bin:

启动PostgreSQL

我找到了三种启动方法,但我不太清楚有什么区别…
对于①,当像rails server一样启动时,无法在终端输入命令,但对于②和③,可以直接输入命令。

由于我启动的状态很明显,所以我选择了1号选项来启动。

请关掉手机。
请将手机关机。

$ postgres #起動

$  pg_ctl status #確認(別タブ)
pg_ctl: server is running

使用 Ctrl+C 终止

Only one option is needed.

$  pg_ctl start #起動
server started

$  pg_ctl status #確認
pg_ctl: server is running

$  pg_ctl stop #終了
server stopped

据报道,该地区的犯罪率在过去几年内已经显著下降。

$  brew services start postgresql #起動
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)

$  pg_ctl status #確認
pg_ctl: server is running

$  brew services stop postgresql #終了
Stopping `postgresql`... (might take a while)
==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)

确认数据库

在启动PostgreSQL的情况下,可以通过以下命令进行确认。
数据库名称可省略。

psql --list [データベース名]
psql -l [データベース名]
$ postgres #dbの起動

$ psql -l
                              List of databases
      Name      |   Owner   | Encoding | Collate | Ctype | Access privileges
----------------+-----------+----------+---------+-------+-------------------
 postgres       | wm        | UTF8     | C       | C     |
 template0      | wm        | UTF8     | C       | C     | =c/user          +
                |           |          |         |       | user=CTc/user
 template1      | wm        | UTF8     | C       | C     | =c/user          +
                |           |          |         |       | user=CTc/user

请注意,虽然在安装后已经有三个数据库了,但它们是需要的,所以请不要删除。

据说模板是在创建数据库时程序使用的。

由于删除Postgres之后,无法使用省略数据库名称的命令,所以我不太确定详情,但似乎最好不要删除它。(也许它是命令的默认值?)

$  psql --list
psql: error: could not connect to server: FATAL:  database "postgres" does not exist

创建和删除数据库

在启动PostgreSQL的情况下,可以通过以下命令进行数据库的创建和删除。

$ createdb [データベース名] #dbの作成

$ dropdb [データベース名] #dbの削除

连接到数据库

在已经启动PostgreSQL的情况下,可以使用以下命令进行连接。

$ psql [データベース名] #dbに接続

postgres=>\q #終了
psql (12.2)
Type "help" for help.

postgres=> 

只需一个选项:通过在「postgres=>」后面输入命令来进行操作。
如果是超级用户,则为「postgres=#」,否则为「postgres=>」。

确认用户的角色

据说在PostgreSQL中,用户被称为Rol。
在启动PostgreSQL并连接到数据库后,可以使用以下命令来创建和删除Rol。

$ postgres=> \du
$ postgres #dbの起動

$  psql postgres #データベースに接続
psql (12.2)
Type "help" for help.

postgres=>\du

   Role name   |                List of roles Attributes                    | Member of
---------------+------------------------------------------------------------+-----------
 user          | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

创建和删除(用户)角色

在启动了PostgreSQL的情况下连接到数据库后,可以使用以下命令来创建和删除角色。
请注意,在命令的末尾需要添加” ; “,不要忘记。

postgres=> create role [ロール名]; #ロールの作成

postgres=> drop role [ロール名]; #ロールの削除
postgres=> create role new_user; #ロールの作成

postgres=> \du #ロールの確認

   Role name   |                List of roles Attributes                    | Member of
---------------+------------------------------------------------------------+-----------
 new_user      | Cannot login                                               | {}
 user          | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

尽管使用此方式会创建角色,但由于Attributes中显示为“无法登录”,因此用户尚未注册。

postgres=> select usename from pg_user; #ユーザーの確認
  usename
-----------
 wm
(1 rows)

在这里,您可以按照以下方式指定选项(有关可指定的选项,请参见这里)。

postgres=> create role new_user WITH LOGIN; #ログインできるロールの作成

postgres=> \du #ロールの確認

   Role name   |                List of roles Attributes                    | Member of
---------------+------------------------------------------------------------+-----------
 new_user      |                                                            | {}
 user          | Superuser, Create role, Create DB, Replication, Bypass RLS | {}


postgres=> select usename from pg_user; #ユーザーの確認
  usename
-----------
 wm
 divemates
(2 rows)

更改数据库的所有者

在数据库和角色已经创建的情况下,可以使用下一个命令进行更改。
了解更多关于选项的详细信息,请点击这里。

postgres=> ALTER DATABASE [データベース名] OWNER TO [新しいオーナー名];

指定一个所有者来创建数据库

在已创建角色的状态下,使用以下命令创建。

$  createdb [データベース名] -O [ロール名]

确认桌子

在Rails等框架下创建表格后,可以使用下一个命令进行确认。

postgres=> SELECT * FROM [テーブル名];
$ postgres #dbの起動

$ psql mydb #テーブルを作成したデータベースに接続
psql (12.2)
Type "help" for help.

mydb=> SELECT * FROM users;
 id | name | email 
----+------+------
(0 rows)

这个问题的一个答案可以是”参考”。

从安装PostgreSQL 11.5到在Rails中进行数据库更改的过程。

bannerAds