読了時間: 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ユーザーにもおすすめです。
執筆: 仙石裕明