PostgreSQL
公式ドキュメント
編集公式ドキュメントは以下のサイトで参照できる。
- PostgreSQL日本語ドキュメント (日本語)
- PostgreSQL: Documentation (英語)
PostgreSQL devel Documentation (英語, 開発版)※リンク切れのためコメントアウト
概要
編集インストール方法
編集Fedora の場合、dnf コマンド
sudo dnf install postgresql sudo dnf install postgresql-server
で入る。
それぞれ、クライアント側(postgresql)とサーバー側(postgresql-server)である。この両方を入れないといけない。片方だけだと、後述の sytemctl が失敗する。データベースサーバーとして postgresql-server を起動して使う仕組みである。
インストールできたと思ったら、とりあえず下記コマンドでバージョン確認をできる。
psql -V
または
psql --version
である。
なお、ヘルプ一覧を見るにはpsql --help
である。h
だけだとホスト("host")に「h」が使われているので、ヘルプの意味にならないので、きちんと help と指定しよう。
- 初期設定
データベースとしての使用の前には、さらに後述のsytemctlの前に、初期化の設定を下記コマンドで行わないといけない。(そうしないとエラーで失敗する)
sudo postgresql-setup --initdb
起動や終了などの方法
編集- 起動方法
上記のコマンドがすべて終わったら、ようやく、postgresql-server を起動できる。コマンド名にはserver とないが、しかし下記コマンドで起動されるのはデータベースサーバーのほうである。
sudo systemctl start postgresql
なお、sytemctl start は Fedora側のコマンドである。単にそのコマンドを使って postgresql を起動せよ、という命令を上記コマンドでは実行しているにすぎない。
- 終了方法
postgresqlサーバー終了は
sudo systemctl stop postgresql
である。
- 状態確認コマンド
起動状態の確認コマンドは、起動中(systemctl start postgresql を実行したあとの状態)に、
sudo systemctl status postgresql
である。これを押すと、ターミナル(コマンド端末)画面に、確認結果の情報が列記される。
なお、確認画面の終了方法は q ボタン である。
- 接続方法
postgres を使用するためには、インストールしたpostgresのシステムに接続しなければならないが、その際にアカウントが必要になるのだが、当然、あなた個人用のアカウントなんて作成されておらず、「 postgres 」という名のアカウントだけが事前に用意されているので、これを使うことになる。
なので、まずLinux のターミナルのアカウントを変更する必要がある。下記コマンド
sudo su - postgres
でアカウント「postgres」に変更できる。これをしないと、手元のパソコンで通常使用しているユーザー名でpostgresシステムにログインしようとするが、当然ながらそんなアカウント名はインストールしたばかりのpostgresシステムでは作成されていないので、(アカウント名を postgres に切り替えないと)ログインに失敗してしまう。
アカウント名を切り替え終わったら、コマンド
psql -U postgres
でログインできる。
[postgres@fedora ~]$ psql -U postgres psql (14.3) "help"でヘルプを表示します。 postgres=#
のような結果になれば、とりあえず成功である。
なお、終了するには、コマンド
\q
である。つまり、
postgres-# \q
のような入力画面でエンターすることになる。
これはまだpostgresqlとの接続を終了しただけなので、まだlinuxのアカウントはpostgreのままである。
なので、普段使用している元のアカウントに戻るなら、単に exit
コマンドで良い。
exit
試験使用
編集インストールや初期設定の終わったあとなら、
sudo su - postgres
のあとで、
下記コマンドを実行するだけで、まだなにもデータベースを作成しなくても、データの一覧が表示されます。
psql -l
Fedora 36 にインストールした psql (PostgreSQL) 14.3 での例は、下記のようなデータでした。
データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | 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 + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (3 行)
データベースの作成方法
編集たとえば、
sudo su - postgres
で、まず接続する。
そのあと、まず、所有者になるユーザーを専用コマンドcreateuser
で作る。たとえばユーザー名を yamada とするならコマンドは
createuser yamada
となる。
その後、そのユーザー名を、これから作成するデータベースの所有者(owner)名としてデータベース登録を始める。とりあえずデータベース名を testdb とするなら、コマンドは
createdb -O yamada testdb
のようになる。
確認のため、
psql -l
コマンド。すると、下記のように表示される。
データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限 -----------+----------+------------------+-------------+-------------------+----------------------- testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 行)
のように、作成したデータベースが追加されて
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
という行が加わり、また最後が「4 行」になっているのが分かる。
このtestdb にログインするには、単に、上記の表示などが見られる postgresQL接続状態にて、コマンド
psql testdb
を実行するだけでいい。
psql (14.3) "help"でヘルプを表示します。
のように表示されれば、とりあえずの成功である。
テーブルの作成
編集先に
sudo su - postgres psql mydb
をしておく。
すると、下記の状態になる。
psql (14.3) "help"でヘルプを表示します。 postgres=#
CREATE TABLE
コマンドで、テーブルを作成できる。
書式は、
CREATE TABLE テーブル名 ( 列名1 データ型1 補足1, 列名2 データ型2 補足2 );
である。「補足」の部分は無くても良く、たとえばNULL値を許容するかどうかの指定などに使う。 NOT NULL などが「補足」にくる。
コード例
mydb=# CREATE TABLE test1 ( id integer, name varchar(30) );
末尾にセミコロンが必要なのを注意。セミコロンを忘れると作成できない。
上記コードを入力すると、自動的に下記のように「CREATE TABLE」という反応が最終行の下に追記され、また入力待ちになるので、下記のような画面になる。
画面
mydb=# CREATE TABLE test1 ( id integer, name varchar(30) ); CREATE TABLE mydb=#
とりあえず、この画面になれば成功である。
この状態で、入力したテーブルの内容を確認するには\d
で可能である。
mydb=# CREATE TABLE test1 ( id integer, name varchar(30) ); CREATE TABLE mydb=# \d リレーション一覧 スキーマ | 名前 | タイプ | 所有者 ----------+-------+----------+---------- public | test1 | テーブル | postgres (1 行)
なお、データベース名が「mydb」に変わってるが、単にwiki著者がネット情報を参考にそのデータベース名で作ってしまったから、そうなってる。
これだけだと、まだデータの列名だけを決めただけなので、具体的な中身がない。中身はコマンド insert
で入力できる。
つづけて、
リレーション一覧 スキーマ | 名前 | タイプ | 所有者 ----------+-------+----------+---------- public | test1 | テーブル | postgres (1 行) mydb=# insert into test1 values (1, 'tanaka' ); INSERT 0 1
のようにinsert コマンド「 insert into test1 values (1, 'tanaka' ); 」を入力すると、 反応「 INSERT 0 1 」が返ってくる。
構文は、
INSERT INTO テーブル名 VALUES (値1, 値2) ;
である。
作成したテーブルの中身を確認したいなら、コマンドselect
であり、上記の場合なら具体的には
select * from test1;
である。
結果
mydb=# select * from test1; id | name ----+-------- 1 | tanaka (1 行)
のようになれば、成功。
つづけて、今後のコマンドの勉強のため、読者には
insert into test1 values (2, 'itoh' );
をしてもらいたい。(あとでこれの消しかたを教える)
つづけて
select * from test1;
をすれば、
結果
mydb=# select * from test1; id | name ----+-------- 1 | tanaka 2 | itoh (2 行)
のようになる。
項目の削除の方法
編集では、 idが1のtanaka を消そう。delete
で消せる。上記の例なら、
delete from test1 where id=1 ;
で消せる。
構文は
DELETE FROM テーブル名 WHERE 条件式
である。
ともかくdeleteコマンドを実行したら、つづけて確認のため、
select * from test1;
すれば、結果
mydb=# select * from test1; id | name ----+------ 2 | itoh (1 行)
となる。たしかに yamada が正しく消せた。
関連項目
編集- en:PostgreSQL/Select without elimination - How to use a conditional to narrow down without elimination.
- en:Converting MySQL to PostgreSQL