走り書きの備忘です。
ローカル環境で作成した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をインストールしています。
以下、その過程です。
- すでにインストールされたものを探すコマンド
- 動作(running)していないか確認コマンド
- 動いてたら止めるコマンド
- 削除コマンド
- PostgreSQLインストールコマンド
- DBの初期化コマンド
- PostgreSQL-11起動コマンド
- ステータス確認コマンド
- 終了コマンド
- PostgreSQLにアクセスするコマンド
- ロールの作成
- 文字コードをUTF-8にするコマンド
- ドランザクションを独立させる(?)コマンド
- DBを作るコマンド
- 接続権限を与えるコマンド
- Djangoの設定
- PostgreSQLの認証方法を変更する
- まとめ
古いバージョンの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';
DBを作るコマンド
create database DB名 encoding 'UTF8' owner ユーザー名;
接続権限を与えるコマンド
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
これでようやくマイグレーションできました。
まとめ
いろんな事が起こりすぎて、吐きそう。