本番環境はいじれないから、別環境に特定のバージョンのDB環境を準備したいときありますよね。
そんなときの、自分用のメモです。
- Ubuntu18.04LTS
- PostgreSQL9.5
postgreSQL9.5インストール
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list
apt update
apt install postgresql-9.5
postgreSQL起動
systemctl start postgresql@9.5-main
ログイン
su postgres
psql -U
データベース一覧表示
# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-------------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
データベース作成
create database test
テーブル作成
pkeyカラムをプライマリーキーに設定。
create table test (pkey serial primary key, id integer);
テーブル一覧表示
# \d
List of relations
Schema | Name | Type | Owner
--------+---------------+----------+----------
public | test | table | postgres
public | test_pkey_seq | sequence | postgres
(2 rows)
postgreSQLはprimary key設定すると「test_pkey_seq」テーブルが自動で作成されるんだね。
テーブル選択
postgres=# \c test
You are now connected to database "test" as user "postgres".
テーブル設定表示
# \d test
Table "public.test"
Column | Type | Modifiers
--------+---------+-----------------------------------------------------
pkey | integer | not null default nextval('test_pkey_seq'::regclass)
id | integer |
Indexes:
"test_pkey" PRIMARY KEY, btree (pkey)
データインサート
insert into test (id) values ('5');
テーブルの中身確認
# select * from test;
pkey | id
------+----
1 | 5
(4 rows)
pkeyは自動だね。
カラム追加
# alter table test add column id2 integer;
あれ、コマンドあっているのに他のコンソールからpostgreSQLに接続できない。
psql -U postgres test
psql: FATAL: Peer authentication failed for user "postgres"
cd /etc/postgresql/9.5/main
vim pg_hba.conf
pg_nba.conf変更前
local all postgres peer
pg_nba.conf変更後
local all postgres md5
postgreSQLを再起動。
systemctrl restart postgresql
別のターミナルでもつながった。OKOK。