postgreSQLの操作方法を叩き込む
はじめに
皆様、お疲れ様です。
このスクラップでは、PostgreSQLを初めて触る私が操作に詰まったので、実行結果を残しながら頑張って体にしみこませていきます。
また、私のスキルですが...
- DB(Oracle、MySQL)は触ったことがある。
- 外部結合・内部結合くらいはわかる。
みたいになっています。
ちなみに、実行環境はWSL2です。それでは、よろしくお願いいたします。
aptでインストールしよう
とにもかくにも、インストールしなくては始まりません。なので、aptを使ってインストールしていきましょう。公式ページはこちらです。
$ sudo apt install curl ca-certificates gnupg
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ sudo apt update
$ sudo apt install postgresql-13
バージョン確認でインストールに成功したのかを確認しましょう。バージョン情報が出たら、インストール成功です。
$ psql --version
psql (PostgreSQL) 13.3 (Ubuntu 13.3-1.pgdg20.04+1)
やったぜ。
デフォルトユーザ(postgres)でログインしよう
インストールができたら、とりあえずログインしましょう。
インストール時にデフォルトユーザであるpostgres
が登録されていますので、このユーザでログインです。sudoのパスワードを入力してログインしましょう。
$ sudo -u postgres -i
postgres@:~$
sudo権限でログインしても、まだ終わりじゃありません。psql
コマンドでもう一段階深い階層まで入りましょう。
postgres@:~$ psql
psql (13.3 (Ubuntu 13.3-1.pgdg20.04+1))
Type "help" for help.
postgres=#
ここまできて、ようやくsqlコマンドを利用できるようになりました。
続いて、パスワードが設定されていないデフォルトユーザpostgres
にパスワードを設定してあげましょう。
postgres=# ALTER ROLE postgres PASSWORD '****'
パスワードが設定できたら、ログアウトして、もともとのシェルまで戻りましょう。2段階目のシェルから1段階目のシェルにログアウトするときは、\q
を使用しましょう。
postgres=# \q
postgres@:~$
1段階目のシェルから元々のシェルにログアウトするには、exit
を使用します。
postgres@:~$ exit
logout
$
それでは、1段階目のシェルを経由せず、一気に2段階目のシェルにログインしてみましょう。一気にログインするためには、psql
コマンドを使用します。
$ psql -h localhost -U postgres
Password for user postgres:****
psql (13.3 (Ubuntu 13.3-1.pgdg20.04+1))
Type "help" for help.
postgres=#
ここまでで、
- sudo権限を用いた無理やりログイン
- デフォルトユーザへのパスワード設定
- ログアウト
-
psql
を使用した正規のログイン
...についてできるようになりました。
参考資料
データベースを指定してログインしよう
この次のトピックで新しいデータベースを追加しますが、そんなときにログイン時にデータベースを指定したくなります。実現するためには-d
オプションを加えた以下のコマンドを使用します(test_db
は次のトピックで追加するデータベース名です)。
$ psql -h localhost -U postgres -d test_db
Password for user postgres:****
psql (13.3 (Ubuntu 13.3-1.pgdg20.04+1))
Type "help" for help.
test_db=#
これで一件落着です。
データベースを作ってみよう
psql
でログインした皆様の目の前には、以下のようなコンソールが映っているかと思います。
postgres=#
ここで注意したいのは、コンソールに書いてあるpostgres
がユーザ名ではなく、データベース名であるということです。ログイン時にデータベース名を指定しないと、デフォルトであるpostgres
という名前のデータベースにログインします。
なんだか、初期状態ではどんなデータベースが用意されているのかが気になってきました。なので、\l
コマンドを使用してデータベースのリストを表示してみましょう。
postgres=# \l
表示されたリストはこんな感じ。表示を終了したい場合は、q
を押しましょう。git log
コマンドの表示終了方法と一緒ですね。
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------------------+-----------+----------+---------+---------+-----------------------
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
(END)
ここにある3種類のデータベースはそれぞれ以下のような特徴を持っています。
DB名 | 特徴 |
---|---|
postgres | デフォルトDB |
template0 |
CREATE DATABASE のテンプレート |
template1 |
CREATE DATABASE のテンプレート |
template0
とtemplate1
の違いについては、このサイトを参考にしてみてください。今のところ、template0
を使用すると「まっさらな」データベースが生成される、template1
を使用すると「ちょっと加工された」データベースが生成される、くらいの認識です。
デフォルトのデータベース配置が理解できたところで、新しいデータベースを登録してみましょう。コマンドは通常のSQL文です。
postgres=# CREATE DATABASE test_db;
CREATE DATABASE
ここまでできたら、再度データベースリストを\l
で確認してみましょう。新しくtest_db
という名前のデータベースが追加されていることがわかりますね。
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------------------+-----------+----------+---------+---------+-----------------------
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
test_db | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
(4 rows)
(END)
それでは、データベースをtest_db
に切り替えてみましょう。切り替えコマンドは\c
です。
postgres=# \c test_db
You are now connected to database "test_db" as user "postgres".
test_db=#
これで、今回の目標は達成です。