PostgreSQLとは †
文字列置換をする方法 †
replace(original, needle, replace)
- original の中から needle を見つけ出し, replace に置き換えてくれる.
- 何故か,こういうときは例がneedleなんだよな.
日付のフォーマットを変更 †
to_char(date, 'YYYY/MM/DD');
to_char(time, 'HH:MI:SS');
- to_charを使えばepoch timeを日付に戻せる
to_char('1970-01-01'::date + (unixtime || 's')::interval, 'YYYY-MM') from test;
日付時刻関数のextract †
- 以下で,時刻,日付,タイムスタンプ型から特定の部分だけ引き抜ける
extract(''field'' from ''column'')
extract(hour from timestamp)
extract(year from date)
- 以下fieldに使えるフォーマット一覧
- century (世紀)
- day (日)
- decade (十年)
- dow (曜日)
- doy (通算日数)
- epoch
- hour (時)
- microseconds (マイクロ秒)
- millennium (ミレニアム)
- milliseconds (ミリ秒)
- minute (分)
- month (月)
- quarter (四半期)
- second (秒)
- timezone_hour
- timezone_minute
- week (週)
- year (年)
- あと,date_truncも便利
- 参照:日付/時刻関数と演算子*4
文字列関数 †
大文字小文字を区別せずに検索する †
ジャンル:PostgreSQL
PostgreSQLが容量超過した。 †
- 契約してるPostgreSQL容量を超過したので、データベースのサイズを縮小した。
- その時の記録
SELECT relname, reltuples as rows, (relpages * 8192) as bytes FROM pg_class order by bytes desc;
- pg_class という特殊テーブルから情報を抽出する
- relpagesが8192バイトごとの情報なので、バイト数に変換するには8192をかける
=> SELECT relname, reltuples as rows, (relpages * 8192) as bytes FROM pg_class order by bytes desc;
relname | rows | bytes
---------------------------------+--------+-----------
hoge_history | 534201 | 157196288
access_history | 44502 | 14344192
user_access | 36037 | 9109504
user_info | 11368 | 4456448
(中略)
- 削除にはdeleteコマンドを使う
=> DELETE FROM hoge_history;
DELETE 535056
- しかし、これだけでは見た目の情報が減らない
=> DELETE FROM hoge_history;
DELETE 535056
=> SELECT relname, reltuples as rows, (relpages * 8192) as bytes FROM pg_class order by bytes desc;
relname | rows | bytes
---------------------------------+--------+-----------
hoge_history | 534201 | 157196288
(中略)
- 完全に削除するためにはVACUUMコマンドを使う*8
=> VACUUM FULL hoge_history ;
VACUUM
=> SELECT relname, reltuples as rows, (relpages * 8192) as bytes FROM pg_class where relname = 'hoge_history';
relname | rows | bytes
--------------+------+-------
hoge_history | 0 | 0
(1 row)
- 参考:PostgreSQL :: テーブルのサイズ(物理容量)とレコード数を調べる [Tipsというかメモ]*9