トップデータベース > psqlの使い方

psqlの使い方

データベースおよびテーブル一覧を表示する

データベースの一覧は -l コマンドで表示される。

C:\gis>psql -U postgres -l
接続後では \l コマンドとなる。
C:\gis>psql -U postgres
postgres=# \l

\l+ とすると、データベースのサイズなど詳細が表示される。出力の一部を下に示す。

 osm       | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 |  | 13 MB   | pg_default |
 postgres  | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 |  | 5891 MB | pg_default | default administrative connection database

"今回、pg_dump で PostgreSQL on Ubuntu からダンプした osm.dump を psql で PostgreSQL on Windows に取り込んだところ、 異常があったので、\l+ を実行したところ、この結果で異常が判明した。 データベース osm にインポートされるべきものが、データベース postgres にインポートされている。

平文形式でダンプしたり、アーカイブ形式でダンプしたりあれこれ試行したので、 最初の操作は正しいが、後の操作を間違えたのかも知れない。 あるいは、最初の平文形式のダンプ/リストアに誤りがあったのかも知れない。 いずれにせよ、じっくり学び直そう。"

テーブル一覧は \z、テーブル定義は \d である。

postgres=# \z
postgres=# \d raster_columns

データベース osm のテーブル一覧を表示する

c:\gis\osm>psql -U postgres osm
osm=# \z

 スキーマ |        名前        |    型    |        アクセス権         | Column privileges | Policies
----------+--------------------+----------+---------------------------+-------------------+----------
 public   | geography_columns  | ビュー   | postgres=arwdDxt/postgres+|         |          |                    |          | =r/postgres               |          |
 public   | geometry_columns   | ビュー   | postgres=arwdDxt/postgres+|         |          |                    |          | =r/postgres               |          |
 public   | planet_osm_line    | テーブル | postgres=arwdDxt/postgres+|         |          |                    |          | =r/postgres               |          |
 public   | planet_osm_point   | テーブル | postgres=arwdDxt/postgres+|         |          |                    |          | =r/postgres               |         |
 public   | planet_osm_polygon | テーブル | postgres=arwdDxt/postgres+|         |          |                    |          | =r/postgres               |          |
 public   | planet_osm_roads   | テーブル | postgres=arwdDxt/postgres+|         |          |                    |          | =r/postgres               |          |
 public   | raster_columns     | ビュー   | postgres=arwdDxt/postgres+|         |          |                    |          | =r/postgres               |          |
 public   | raster_overviews   | ビュー   | postgres=arwdDxt/postgres+|         |          |                    |          | =r/postgres               |          |
 public   | spatial_ref_sys    | テーブル | postgres=arwdDxt/postgres+|         |          |                    |          | =r/postgres               |          |
(9 行)

テーブル planet_osm_polygon の定義を表示する

osm=# \d planet_osm_polygon
          テーブル "public.planet_osm_polygon"
         列         |            型             | 修飾語
--------------------+---------------------------+--------
 osm_id             | bigint                    |
 access             | text                      |
 [中略]
 z_order            | integer                   |
 way_area           | real                      |
 abandoned:aeroway  | text                      |
 abandoned:amenity  | text                      |
 abandoned:building | text                      |
 abandoned:landuse  | text                      |
 abandoned:power    | text                      |
 area:highway       | text                      |
 way                | geometry(Geometry,900913) |
インデックス:
    "planet_osm_polygon_index" gist (way) WITH (fillfactor='100')

テーブル、インデックスのサイズを求める

次のsqlでテーブル、インデックスのサイズが確認できる[1]。

select
  objectname,
  to_char(pg_relation_size(objectname::regclass), '999,999,999,999') as bytes 
from (
  select tablename as objectname from pg_tables  where schemaname = 'public'
  UNION
  select indexname as objectname from pg_indexes where schemaname = 'public'
) as objectlist
order by bytes desc;

オプション

-c 単一コマンド実行

次の例は データベース osm のテーブル名一覧を CSV形式でファイル出力して終了する。 -t は行(tuples)のみ表示、-A は桁揃えなし、-F は桁揃えなしのときのフィールド区切り文字指定を意味する。

postgres@dell:~$ psql -d osm -c "\dt;" -t -A -F , > /media/sf_gisdata/tmp.csv

tmp.csv の内容を以下に示す。

public,my_osmattr,table,postgres
public,my_osmdata,table,postgres
public,my_osmdup,table,postgres
public,planet_osm_line,table,postgres
public,planet_osm_point,table,postgres
public,planet_osm_polygon,table,postgres
public,planet_osm_roads,table,postgres
public,spatial_ref_sys,table,postgres

テーブル my_osmdup の存在の有無だけ知りたいときは次のようにする。あれば 1、なければ 0 が出力される。

$ psql -d osm -c "SELECT count(*) FROM information_schema.tables WHERE table_name = 'my_osmdup';" -t -A

psqlを終了する

psqlを切断するには \q を入力する。

使用例
postgres=# \q

psqlの使い方(ubuntu版)

hatada@hatada-VirtualBox:~$ cd /media/sf_osm
hatada@hatada-VirtualBox:/media/sf_osm$ su - postgres
パスワード: 
postgres@hatada-VirtualBox:/media/sf_osm$ psql -d osm -f ./update_database.sql

*.sqlファイルの文字コードは UTF-8 とする。

テーブル一覧の表示

$ psql -d osm
osm=# \dt;

テーブルの表示

osm=# \d テーブル名;

インデックス削除

osm=# drop index インデックス名;

updateクエリなどを中断してゴミが残ったとき vacuum を実行する(PostgreSQL独自機能)。

osm=# vacuum (verbose) [ テーブル名 ] ;

psql終了

osm=# \q

A. 参考文献

[1] PostgreSQL - テーブルとindexのサイズを確認する
[2] psqlのオプションの使い方とオプション一覧