【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で動く確認ができたということで。
以上です。