PostgreSQLの使い方
PostgreSQL 8.3.5文書よりActiveObjectsと組み合わせ使う上で知ってた方がよさそうな部分のみ抜粋。
ここ記述は使いながら修正します。
その他追記の際に参考にしたURL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/psql_k17.htm
OSコマンドで共通な考え
- コマンド実行時にユーザ名を指定しないと、OSのログインユーザを使用する。
- コマンド実行時にデータベース名を指定しないと、ユーザ名を使用する。
データベースを作成する。
$ createdb -U username dbname
- 注意点
- 最初にusernameと同じ名前のdatabaseを作る必要がある。
データベースを削除する。
$ drobdb -U username dbname
PostgreSQL対話式端末プログラムを起動する。データベースdbnameがアクティブになる。
$ psql -U username dbname
ユーザ毎にpsqlプロンプトが異なる。
dbname=> … 一般ユーザ dbname=$ … スーパユーザ dbname=# … ? ← いまここ
versionのを確認する。
dbname=> SELECT version();
現在時刻を表示する。
dbname=> SELECT current_date;
計算を行う。
dbname=> SELECT 2 + 2;
入力バッファをクリアする
dbname=> \r
各種PostgreSQL SQLコマンドの構文に関するヘルプを表示する。
dbname=> \h
psqlを終了する
dbname=> \q
テーブルを作成する。
CREATE TABLE weather ( city varchar(80), temp_lo int, -- 最低気温 temp_hi int, -- 最高気温 prcp real, -- 降水量 date date );
データベース一覧を表示する。
select datname from pg_database order by datname;
ユーザテーブル一覧を表示する。
select tablename from pg_tables where not ( tablename like 'pg_%' or tablename like 'sql_%' ) order by tablename;
指定したテーブルのカラム情報を表示する。
select a.attnum as no, a.attname as tablename, t.typname as typename, case when a.attnotnull then 'YES' else 'NO' end as "not null" from pg_attribute a, pg_class c, pg_type t where c.relname = 'tablename' and a.attrelid = c.oid and t.oid = a.atttypid and a.attnum > 0;
- ポイント
- pg_attribute.attnumは、ユーザ作成の列には正の数が、システムの列には負の数が設定される。
テーブルに行を挿入する。
INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
大量のデータを平文テキストファイルからロードする。
COPY weather FROM '/home/user/weather.txt';
結合問い合わせ(1)
SELECT weather.city, weather.temp_lo, weather.temp_hi, weather.prcp, weather.date, cities.location FROM weather, cities WHERE cities.name = weather.city;
結合問い合わせ(2)
SELECT * FROM weather INNER JOIN cities ON (weather.city = cities.name);
左外部結合
SELECT * FROM weather LEFT OUTER JOIN cities ON (weather.city = cities.name);
自己結合
SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high, W2.city, W2.temp_lo AS low, W2.temp_hi AS high FROM weather W1, weather W2 WHERE W1.temp_lo < W2.temp_lo AND W1.temp_hi > W2.temp_hi;
ビューを作成する。
CREATE VIEW myview AS SELECT city, temp_lo, temp_hi, prcp, date, location FROM weather, cities WHERE city = name;
外部キーを作成する
CREATE TABLE cities ( city varchar(80) primary key, location point ); CREATE TABLE weather ( city varchar(80) references cities(city), temp_lo int, temp_hi int, prcp real, date date );