Pocket

読了時間: 10分

PostgreSQLのデータベース操作方法について説明します。
(内部向けに作成)

データベースへの接続

Postgresがインストールされている状態で、ターミナル(コマンドプロンプト)上で下記コマンドを入力します。

psql データベース名

上記を入力して正常に動作すると、下記のように対話型でSQLにより操作できるようになります。
=>以降に入力していきます。

sengokulab=>  

対話モードを終了するときには、下記で終了します。

\q 

補足

データベース名を入力しないと、ユーザー名がデータベース名となります。
たとえば、ユーザー名がsengokulabの場合は、データベース名はsengokulabになります。

データ内容の確認

ここではサンプルとして、MySQLの記事でも用いた、平成27年度町丁・字ポリゴンデータ(世界測地系緯度経度)の世田谷区ポリゴンデータ(地理データ)を扱います。
データのインポートについては、別記事で紹介したいと思います。

テーブル一覧の表示

まずはデータベース内にどんなテーブルがあるかを確認してみましょう。
テーブル一覧の表示は下記SQLで実施します。

SQL:

\d 

出力結果:

                 List of relations
 Schema |        Name        |   Type   |   Owner
--------+--------------------+----------+-----------
 public | geography_columns  | view     | postgres
 public | geometry_columns   | view     | postgres
 public | h27ka13112         | table    | amiyamoto
 public | h27ka13112_gid_seq | sequence | amiyamoto
 public | raster_columns     | view     | postgres
 public | raster_overviews   | view     | postgres
 public | spatial_ref_sys    | table    | postgres
(7 rows)

補足

h27ka13112以外は地理データを扱うための補助テーブルになります。
地理データを操作する場合に必要となります。

テーブルのスキーマの確認

今度はテーブルのスキーマ(列名や型等)を確認していきます。

SQL:

\d h27ka13112 

出力結果:

                                      Table "public.h27ka13112"
   Column   |            Type             |                        Modifiers
------------+-----------------------------+----------------------------------------------------------
 gid        | integer                     | not null default nextval('h27ka13112_gid_seq'::regclass)
 area       | numeric                     |
 perimeter  | numeric                     |
 h27ka13_   | integer                     |
 h27ka13_id | integer                     |
 ken        | character varying(2)        |
 city       | character varying(3)        |
 ken_name   | character varying(12)       |
 sityo_name | character varying(22)       |
 gst_name   | character varying(14)       |
 css_name   | character varying(14)       |
 hcode      | smallint                    |
 kihon1     | character varying(4)        |
 dummy1     | character varying(1)        |
 kihon2     | character varying(2)        |
 keycode1   | character varying(9)        |
 keycode2   | character varying(9)        |
 area_max_f | character varying(1)        |
 kigo_d     | character varying(2)        |
 n_ken      | character varying(2)        |
 n_city     | character varying(3)        |
 kigo_e     | character varying(3)        |
 kigo_i     | character varying(1)        |
 moji       | character varying(96)       |
 kbsum      | smallint                    |
 jinko      | numeric(10,0)               |
 setai      | numeric(10,0)               |
 x_code     | numeric                     |
 y_code     | numeric                     |
 kcode1     | character varying(7)        |
 key_code   | character varying(11)       |
 geom       | geometry(MultiPolygon,4326) |
Indexes:
    "h27ka13112_pkey" PRIMARY KEY, btree (gid)

補足

最後のgeom列は地理的な処理をするために必要なデータとなります。

## データの読込

テーブルからの基本データの読込はSELECT文により実施できます。
下記では指定したカラムのみ読込を行っています。
(すべてのカラムを表示したい場合には、*で表示できますq)

SQL:

select ken_name, gst_name, moji, jinko from h27ka13112;

出力結果:

 ken_name | gst_name |      moji      | jinko
----------+----------+----------------+-------
 東京都   | 世田谷区 | 太子堂4丁目   |  2915
 東京都   | 世田谷区 | 弦巻5丁目     |  5335
 東京都   | 世田谷区 | 中町2丁目     |  3221
 東京都   | 世田谷区 | 代沢3丁目     |  2103
 東京都   | 世田谷区 | 深沢6丁目     |  2530
 東京都   | 世田谷区 | 北烏山6丁目   |  3878
 東京都   | 世田谷区 | 大蔵3丁目     |  1757
 東京都   | 世田谷区 | 梅丘2丁目     |  3427
 東京都   | 世田谷区 | 奥沢3丁目     |  4052
 東京都   | 世田谷区 | 桜1丁目       |  4653
 東京都   | 世田谷区 | 上祖師谷4丁目 |  3210
 東京都   | 世田谷区 | 駒沢3丁目     |  2836
 東京都   | 世田谷区 | 南烏山2丁目   |  4617
 東京都   | 世田谷区 | 弦巻1丁目     |  5132
 東京都   | 世田谷区 | 岡本3丁目     |  2843
(以下、略)

補足

テーブルのレコード数が多いと、大量に表示されてしまいます。
下記のように文末にlimit 表示したい行数と入力することで、指定した行数のみ読み込むことができます。

select * from h27ka13112 limit 10;

さらなる学習に向けて

SQLのコマンドは沢山あり、最初のうちは大変かもしれません。
こちらのサイトには基本操作がまとめられているので参考になさってください。

既に実施したい処理があるときは、SQLの逆引き辞典や関連サイトが便利です。
最近では「前処理大全(技術評論社)」が手の痒いところまで紹介されていて、とても便利です。
SQLだけでなく、PythonやRの処理例も紹介されており、PythonユーザーやRユーザーにもおすすめです。

執筆: 仙石裕明