te-touのブログ

音楽制作・車・プログラミング・旅行・その他考えてる事など、備忘録的なことも含めて個人的なページです。

AWSのEC2(LINUX2)にPostgreSQLをいれる




走り書きの備忘です。
ローカル環境で作成したDjangoアプリをAWSのEC2(LINUX2)にデプロイ 作業を行っています。
その過程でPostgreSQLをインストールし、初期化→settings.pyのDatabaseを設定しマイグレートコマンドを打ったところ下記のようなエラーになりました。

django.db.utils.ProgrammingError: "WITH ORDINALITY"またはその近辺で構文エラー
LINE 6:                     FROM unnest(c.conkey) WITH ORDINALITY co...

ググった結果、どうやらPostgreSQLのバージョンが古いから的な記事に辿り着きました。
そのため、古いバージョンを消してPostgreSQL-11をインストールしています。
以下、その過程です。

古いバージョンのpostgreSQLを削除する。

すでにインストールされたものを探すコマンド
# yum list installed | grep postgresql
動作(running)していないか確認コマンド
# systemctl status postgresql-11.service
動いてたら止めるコマンド
# systemctl stop postgresql-11.service
削除コマンド
# yum remove postgresql*
PostgreSQLインストールコマンド

まずは、リポジトリを取り込むコマンド

# cd /usr/local/src
# curl -O https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# curl -O https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# rpm -Uvh pgdg-redhat-repo-latest.noarch.rpm

取り込んだリポジトリの確認コマンド

# yum list | grep postgresql11

取り込んだリストのインストールコマンド

# yum -y install postgresql11-server;
# yum -y install postgresql11-devel;
# yum -y install postgresql11-libs;
# yum -y install postgresql11;
# yum -y install postgresql11-llvmjit;
# yum -y install postgresql11-contrib;
# yum -y install llvm5.0;
# yum -y install llvm5.0-libs;
DBの初期化コマンド
/usr/pgsql-11/bin/postgresql-11-setup initdb
PostgreSQL-11起動コマンド
# sudo systemctl start postgresql-11
ステータス確認コマンド
# sudo systemctl status postgresql-11
終了コマンド
# sudo systemctl stop postgresql-11
PostgreSQLにアクセスするコマンド

まずはユーザー変更する必要あり。
ユーザー変更コマンド

$ sudo su postgres

コマンドライン起動(?)コマンド

$ psql
ロールの作成

root権限みたいなものを作るコマンド

postgres=# create role ユーザー名 with login password ‘パスワード';
文字コードをUTF-8にするコマンド
alter role ユーザー名 SET client_encoding TO 'utf8';
ドランザクションを独立させる(?)コマンド
ALTER ROLE ユーザー名 SET default_transaction_isolation TO 'read committed';
接続権限を与えるコマンド
GRANT ALL PRIVILEGES ON DATABASE データベース名 TO ユーザー名;

¥q(バックスラッシュ+q)して終わり。

Djangoの設定

settings.pyの編集

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'DB名',
        'USER': 'ユーザー名',
        'PASSWORD': 'パスワード',
    }
}

psycopg2というものをインストール
(pythonでpostgresqlを使うためのものらしい)

pip install psycopg2
PostgreSQLの認証方法を変更する

初期値はpeer認証になっているものをmd5というものに変更するらしい。

vimでPostgreSQLの設定ファイルを開く

vi /var/lib/pgsql/11/data/pg_hba.conf

peer を md5に変更する。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5 ←ここ
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     md5 ←ここもついでに
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident

ここまでできたら、サーバー再起動。

sudo systemctl restart postgresql-11

これでようやくマイグレーションできました。

まとめ

いろんな事が起こりすぎて、吐きそう。