PostgreSQL

出典: フリー教科書『ウィキブックス(Wikibooks)』
Wikipedia
Wikipedia
ウィキペディアPostgreSQLの記事があります。


公式ドキュメント[編集]

公式ドキュメントは以下のサイトで参照できる。


概要[編集]

インストール方法[編集]

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 が正しく消せた。

関連項目[編集]