连接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中进行数据库更改的过程。