【AndroidとTermux】PostgreSQLをインストールする(メモ
今回は、AndroidのTermuxアプリでデータベースのPostgreSQLをインストールし使ってみる。メモ。
実行環境
はじめに
Android(のTermuxアプリ)で使えるデータベースは、
などがある。
MariaDB
やPostgreSQL
は
# MariaDBの場合 pkg install mariadb # PostgreSQLの場合 pkg install postgesql
で簡単にインストールできます。その後の環境構築やパスワードの設定等の方法がOSや実行環境で微妙に違うようです。エラーが出たりした。
MariaDBを先にインストールしてみたのですが、ユーザーの作成・パスワード設定が出来なかったので後回しにし、今回はPostgreSQLのインストールとユーザー作成までやります。メモです。あくまでもデータベース操作の練習としてやっています。責任は負いかねます。
PostgreSQLのインストール
TermuxアプリにPostgreSQLをインストールします。
手順 参考 : Postgresql - Termux Wiki
※ ネット接続が必要です。
とりあえずライブラリのアップデート
$ pkg update $ pkg upgrade
Termuxアプリに入っている様々なライブラリが更新されます。
postgesqlのインストール
早くもPostgreSQLをインストールします。
$ pkg install postgesql
すぐ済みます。
postgesqlフォルダの作成
インストールが済んだら、次に手作業でフォルダを作る必要があるようです。
$ mkdir -p $PREFIX/var/lib/postgresql
一応説明。
上のmkdirコマンドを実行すると、
/data/data/com.termux/files/usr/var/lib/
の中に postgresql
というフォルダが作成されます。
mkdir
- フォルダ作成コマンド。
-p
のオプション- 階層でフォルダ作成する場合に使う。
$PREFIX
- Termuxの場合
/data/data/com.termux/files/usr
になっている。echo $PREFIX
コマンドで見れる。
- Termuxの場合
ちょっと詳しく確認しておきましょ。
引数なしで 移動コマンドcd
を実行すると、Termuxのホームディレクトリ/data/data/com.termux/files/home
に移る。その一階層上にusr
ディレクトリがある。
# 変数PREFIXの中身を見る $ echo $PREFIX /data/data/com.termux/files/usr # ホームに移動 $ cd # カレントディレクトリを見る $ pwd /data/data/com.termux/files/home # ← デフォルトでこのフォルダがホーム # 一階層上に移動 $ cd .. # 中身を見る $ ls home usr # usrフォルダに移動 $ cd usr # usrフォルダの中身確認 $ ls bin include man tmp doc lib opt var etc libexec share
var
というフォルダが入っています。さらに続けます。
# varフォルダに移動し、中身確認 $ cd var ; ls lib log run service # libフォルダに移動し中身確認 $ cd lib ; ls apt dpkg postgresql
postgesql
フォルダが作成されているのが確認できました。
初期化
先ほど作ったフォルダを初期化するようです。
$ initdb $PREFIX/var/lib/postgresql
ここまでで postgesql
のインストールは完了。
これ以降、これらの作業は不要。
データベースサーバの起動と停止方法
🔰初心者がまず初めに使う SQLite
はファイル形式のデータベースでサーバが要りませんが、MySQL
や PostgreSQL
など大抵のデータベースは、バックグラウンドでサーバを起動させて、そこに接続してSQLで操作を行います。
サーバの起動
pg_ctl startコマンド
でサーバを起動させます。
$ pg_ctl -D $PREFIX/var/lib/postgresql start ごにょごにょ~と出て、 server started
データベースサーバが起動したよ うです。
コマンドは、先ほど作ったフォルダに-D
オプションを付け、start
させています。
pg_ctlコマンドのヘルプ
pg_ctl
コマンドとは? -D
オプションとは? ヘルプを見てみます。
# pg_ctlコマンドのヘルプを見る $ pg_ctl --help pg_ctl is a utility to initialize, start, stop, or control a PostgreSQL server. Usage: pg_ctl init[db] [-D DATADIR] [-s] [-o OPTIONS] pg_ctl start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s] [-o OPTIONS] [-p PATH] [-c] pg_ctl stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s] pg_ctl restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s] [-o OPTIONS] [-c] pg_ctl reload [-D DATADIR] [-s] pg_ctl status [-D DATADIR] pg_ctl promote [-D DATADIR] [-W] [-t SECS] [-s] pg_ctl logrotate [-D DATADIR] [-s] pg_ctl kill SIGNALNAME PID Common options: -D, --pgdata=DATADIR location of the database storage area -s, --silent only print errors, no informational messages -t, --timeout=SECS seconds to wait when using -w option -V, --version output version information, then exit -w, --wait wait until operation completes (default) -W, --no-wait do not wait until operation completes -?, --help show this help, then exit If the -D option is omitted, the environment variable PGDATA is used. Options for start or restart: -c, --core-files allow postgres to produce core files -l, --log=FILENAME write (or append) server log to FILENAME -o, --options=OPTIONS command line options to pass to postgres (PostgreSQL server executable) or initdb -p PATH-TO-POSTGRES normally not necessary Options for stop or restart: -m, --mode=MODE MODE can be "smart", "fast", or "immediate" Shutdown modes are: smart quit after all clients have disconnected fast quit directly, with proper shutdown (default) immediate quit without complete shutdown; will lead to recovery on restart Allowed signal names for kill: ABRT HUP INT KILL QUIT TERM USR1 USR2 Report bugs to <pgsql-bugs@lists.postgresql.org>. PostgreSQL home page: <https://www.postgresql.org/>
pg_ctlコマンドとは何かが最初に書いてあります。
pg_ctl is a utility to initialize, start, stop, or control a PostgreSQL server.
pg_ctl コマンド は、初期化・スタート・ストップ・またはPostgreSQLサーバを制御するユーティリティ(管理ツール)です。
また、
Common options:
の先頭に-D
オプションの説明があります。
-D, --pgdata=DATADIR location of the database storage area
さっき作ったフォルダはデータを入れる用でしょうか。このオプションを省略すると環境のPGDATA
が使われる、ともある。よくわからん。
【追記】
環境変数PGDATA
を設定しておけば-D
オプションを省略できる。
# 環境変数設定 $ export PGDATA=$PREFIX/var/lib/postgresql # 環境変数確認 $ echo $PGDATA /data/data/com.termux/files/usr/var/lib/postgresql
これで設定されたので、pg_ctlコマンド
でサーバ起動や停止をするときは
# サーバ起動 $ pg_ctl start # 停止 $ pg_ctl stop # サーバの状態確認 $ pg_ctl status
と、-D $PREFIX/var/lib/postgesql
オプションが省略できるようになる。
しかし、export
コマンドはターミナルを閉じると無効になる。いちいち書くのも面倒なので、ターミナルを開く際に読み込まれる.bashrc
に前のexport文
を一行書き加えておけば済む。
詳しくは「Linuxコマンド export 環境変数」などで検索ください。
【追記 おわり】
サーバの停止
早くも止めます。
$ pg_ctl -D $PREFIX/var/lib/postgresql stop ごにょごにょ~ LOG: database system is shut down done server stopped
止まった模様。
psコマンドでバックグラウンドのプロセスを見る
サーバを止め忘れると、バックグラウンドでずっと起動しっぱなしになる? 実験してみます。
バックグラウンドでサーバか何かのプロセスが動いてるかどうかを確認するには、ps
コマンド を使います。サーバ起動後にps
コマンドで見てみます。
# サーバ起動 $ pg_ctl -D $PREFIX/var/lib/postgesql # バックグラウンドプロセスを見る postgesqlのみを抽出 $ ps aux | grep postgesql u0_a○○○ 16602 0.1 0.4 203056 17704 ? S<sl 1970 0:00 /data/data/com.termux/files/usr/bin/postgres -D /data/data/com.termux/files/usr/var/lib/postgresql その他多数 ごにょごにょ
u0_a○○○ から始まる1つ1つが各プロセスのようです。
では、サーバを停止させ、ps
コマンドで見ます。
# サーバ停止 $ pg_ctl -D $PREFIX/var/lib/postgresql stop # バックグラウンドプロセス $ ps aux | grep postgesql u0_a○○○ 17130 1.0 0.0 9776 1692 pts/0 S<+ 1970 0:00 grep postgres
1つだけ表示されました。grep postgesql
と書いてあるのでps
コマンドの何かだろう。
サーバを停止したからPostgreSQLのプロセスも消えた訳ですけど、停止させないとどうなるか。
# サーバ起動 $ pg_ctl -D $PREFIX/var/lib/postgresql start ごにょごにょ server start # Termuxを終了する $ exit
Termuxアプリが閉じられます。再びTermuxアプリを開いて次のコマンドを入力
# プロセス確認 $ ps aux | grep postgesql u0_a331 17327 0.3 0.4 203056 17708 ? S<sl 1970 0:00 /data/data/com.termux/files/usr/bin/postgres -D /data/data/com.termux/files/usr/var/lib/postgresql その他ごにょごにょ~
いまやった手順は、
- pg_ctl start コマンドでサーバ起動
- サーバを止め忘れてTermuxアプリを
exit
コマンド で閉じる。 - Termuxアプリを開く。
- バックグラウンドのプロセスを見る
- PostgreSQLサーバのプロセスは働いている
つまり、
Termuxアプリを閉じてもPostgreSQLサーバは動きっぱなし!!
電池が無駄に減るのではないか。他のアプリ等からのデータベース接続がないなら、Termux終了と同時にサーバも停止させるようにしておく必要がありそう。
スーパーユーザーの作成とパスワード設定
データベースの管理者権限を持つユーザーと、そのパスワードを作成します。
SQLiteと違って、ほとんどのデータベースはプライバシーやセキュリティの為にパスワードの設定ができるようになっている。
$ createuser --superuser --pwprompt 管理者(あなた)のユーザー名
適当に管理者名を入力したこのコマンドを入力すると、
Enter password for new role: ココに何かパスワードを入力し、enterキー。すると↓ Enter it again: ココにもう一度同じパスワードを入力
と出ますので、パスワードを何か入力します。このパスワードは覚えておきます。
これで管理者(あなた)のユーザー登録をパスワード付きで完了しました。
createuserコマンドのヘルプ
ユーザー作成コマンドのヘルプは、次のコマンド。
$ createuser --help createuser creates a new PostgreSQL role. Usage: createuser [OPTION]... [ROLENAME] Options: -c, --connection-limit=N connection limit for role (default: no limit) -d, --createdb role can create new databases -D, --no-createdb role cannot create databases (default) -e, --echo show the commands being sent to the server -g, --role=ROLE new role will be a member of this role -i, --inherit role inherits privileges of roles it is a member of (default) -I, --no-inherit role does not inherit privileges -l, --login role can login (default) -L, --no-login role cannot login -P, --pwprompt assign a password to new role -r, --createrole role can create new roles -R, --no-createrole role cannot create roles (default) -s, --superuser role will be superuser -S, --no-superuser role will not be superuser (default) -V, --version output version information, then exit --interactive prompt for missing role name and attributes rather than using defaults --replication role can initiate replication --no-replication role cannot initiate replication -?, --help show this help, then exit Connection options: -h, --host=HOSTNAME database server host or socket directory -p, --port=PORT database server port -U, --username=USERNAME user name to connect as (not the one to create) -w, --no-password never prompt for password -W, --password force password prompt Report bugs to <pgsql-bugs@lists.postgresql.org>. PostgreSQL home page: <https://www.postgresql.org/>
ユーザー作成は、ユーザーやグループで細かく設定できるようです。「ロール」と呼ばれるものがある。
データベースの作成
SQLiteはファイルが1つのデータベースです。その中に幾つもテーブル作成できる。
一方、PostgreSQL(や他)のデータベースでは、まず「database」を作ります。その中にテーブルを作ります。
# サーバ起動 $ pg_ctl -D $PREFIX/var/lib/postgresql start # database作成 $ createdb mydb
サーバ起動せずにdatabase作成するとエラーになります。
これでデータベースが作られたらしい。プロジェクト毎に作ればいいね。
データベースを開く(接続)
$ psql mydb ↓ こんなのが出た psql (14.1) Type "help" for help. そのあと ↓ プロンプトが変わった mydb=#
新規作成したdatabase「mydb」に接続し、対話式のプロンプトが出てきた。ここにSQL文を打てばいい。
上で行ったデータベース作成と接続の操作は、databaseにユーザー名もパスワードもホスト名もロール名も何も指定していない。と思うが…
プロンプト終了
抜けるには、
データベース名=# exit または データベース名=# quit で、Termuxのプロンプトに戻る↓ $
- サーバを停止
忘れると動きっぱなし。
$ pg_ctl -D $PREFIX/var/lib/postgresql stop
おわりに
TermuxアプリにPostgreSQLをインストール、管理者をパスワード付きで作成、サーバ起動と停止、データベースの作成、まで行った。内容は Postgresql - Termux Wiki 通り。
権限等の設定や型、操作内容がSQLiteとだいぶん違うようで、あまり気軽に使えない。一応Termuxで動く確認ができたということで。
以上です。