postgresqlを導入する
postgresqlをインストールする環境
windows上に構築した仮想マシン centos にpostgresqlを導入していきます。
今回導入したCentOSのバージョンは次のとおりです。
$ cat /etc/redhat-release CentOS release 6.10 (Final)
postgresqlをインストールする
では、さっそくCentOS7にPostgreSQLを導入してみましょう。
まずはPostgreSQLが導入されているか確認します。
$ rpm -qa | grep postgres
もしPostgreSQLが存在していたら、次のコマンドで削除しておきます。
$ sudo yum -y remove postgresql
下記公式サイトから最新版のPostgreSQLのURLを取得。今回はPostgreSQL11を選択しました。
PostgreSQL RPM Repository (with Yum)
次のURLが取得できました。
https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-6-x86_64/pgdg-centos11-11-2.noarch.rpm
よくわからないけど以下のようにします。以下はリポジトリを追加しているそうです。リポジトリの意味を調べてみたけどよくわかりませんでした気にしません。
$ sudo rpm -iUvh https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-6-x86_64/pgdg-centos11-11-2.noarch.rpm
またもやよくからないけど以下のようにします。
$ sudo vi /etc/yum.repos.d/pgdg-11-centos.repo [pgdg95] ...省略... enabled=1 ↓ enabled=0
明示的にリポジトリを追加するためにやるそうです。よくわかないですが気にしません。viはvimのことです。編集した結果以下のようになりました。
[pgdg11] name=PostgreSQL 11 $releasever - $basearch baseurl=https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-$releasever-$basearch enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-11
ここでやっとインストールできます。今回はバージョン11なので l と 1があってわかりにくいです。
$ sudo yum -y install --enablerepo=pgdg11 postgresql11-server postgresql11-devel postgresql11-contrib
インストールできたらバージョンを確認します。
$ psql --version psql (PostgreSQL) 11.0
ここまでネットの情報だけみてやりましたが、なにもトラブルはなくインストールできました。
postgresqlを使える状態にする
状態の確認
『postgres』というアカウント が作成されていることを、「id」コマンドで確認します
$ id postgres uid=26(postgres) gid=26(postgres) 所属グループ=26(postgres)
「/usr/」にインストールされ、さまざまなファイルができていることを確認します。たとえば、以下のようにコマンドが存在するかを見てみます。
$ which psql /usr/bin/psql
サービスに登録されていることを確認します。「/etc/init.d/」に「postgresql」という PostgreSQL の起動・停止を行なうスクリプトが追加されています。
$ ls /etc/init.d/
postgresqlの起動
ルートじゃないと起動できないのでsudoを使います。なぜかpostgresql-11としないと起動できないけど一応これで起動できた↓
$sudo service postgresql-11 start postgresql-11 サービスを開始中: [ OK ]
停止するにはstop
$sudo service postgresql-11 stop postgresql-11 サービスを停止中: [ OK ]
はじめて起動したデータベースの初期化が行われるらしい。
初めて起動したときは、「データベースクラスタの初期化(initdb)」 が行なわれます。これは、データベースを使うために必要なディレクトリ構成を作る処理で、「/var/lib/pgsql/data/」に作成されます。
CentOS で PostgreSQL を使ってみよう!(2) | Let’s Postgres
初期のデータベースを表示
postgresユーザーになって初期のデータベースを表示します。postgresユーザーは初期の状態だとパスワードが設定されておらずログインすることができないので、sudoでpostgresユーザーにログインします。psql -lでデータベースを表示することができます。
[vagrant@localhost ~]$ sudo su - postgres -bash-4.1$ psql -l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限 -----------+----------+------------------+-------------+-------------------+---- ------------------- postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/ postgres + | | | | | pos tgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/ postgres + | | | | | pos tgres=CTc/postgres
postgresqlの初期設定
PostgreSQLを導入すると、CentOS上に「postgres」ユーザーが自動で追加されます。また、データベース「postgres」、データベース接続ユーザー「postgres」も自動で作成されます。まずはpostgresユーザーのパスワードを設置します。なおインストール時に作成される postgres ユーザ(OS側)はパスワードが設定されていません。なのでpostgresユーザーのパスワードを設定します。
CentOSの管理者権限であればpostgresユーザーになれるのですがパスワードを設定しておいたほうがあとあと楽そうです。
$ sudo passwd postgres ユーザー postgres のパスワードを変更。 新しいパスワード: よくないパスワード: 辞書の単語に基づいています よくないパスワード: 簡単すぎます 新しいパスワードを再入力してください: passwd: 全ての認証トークンが正しく更新できました。
これでpostgresユーザーのパスワードを作成できたので、postgresユーザーにログインします。パスワードが求められるので先ほど作成したパスワードを入力してログインしています。
$ su - postgres パスワード: -bash-4.1$
postgresユーザーは次のコマンドでPostgreSQLのシェルに入ることができます
-bash-4.1$ psql psql (11.0) "help" でヘルプを表示します。 postgres=#
シェルから抜けるには \q コマンドを使います
postgres=# \q -bash-4.1$
とりあえずこれで学習の準備はできました。
あとはドットインストールなりをみて勉強すればいいと思います。
postgresqlはこのほかにもかなり情報があるけどとりあえずこのくらいにしておこうと思います。下に今後関係してきそうなもを書いておきました。postgresqlは認証方法の問題でエラーがでることがあるのですが、上記のとおりにやっていけばこの問題で悩ませれることはありません。
peer認証
PostgreSQLではデフォルトの認証方式としてPeer認証が設定されています。Peer認証とは、カーネルからクライアント上のシステムユーザ名を取得し、PostgreSQLデータベースユーザと同一である場合のみ接続が許可される仕組みです。PostgreSQLでは、デフォルトではpostgresデータベースユーザしか存在しないため、UnixユーザもPostgreSQLをパッケージインストールすると作成されているpostgresである必要があります(su – postgresしないとダメということ)。
perr認証の変更を行うには次のファイルを編集します。/var/lib/pgsql/11/data/pg_hba.conf
md5認証
パスワード認証に変更するには auth-method を peer から md5 にすればよいただし, これを最初にやってしまうと postgresユーザ(データベース側)のパスワードは設定されていないため, ログインできない(パスワードがNULLなのでパスワード認証が必ず失敗する)
コメント