PostgreSQL

【PostgreSQL】ERROR: invalid page header in block x of relation base

ERROR: invalid page header in block 0 of relation base/5634493/5635769PostgreSQLで以下のエラーが出た。 このエラーはDB破損時に出るらしい・・・。 もはやどうしようもない・・・。今回はあるテーブルでのみエラーが出たので、 フルバックアップから該…

【PHP】【PostgreSQL】pg_num_row() で行数が0にならない

凡ミスで1時間程ハマった。pg_num_row()は結果の行数を返すメソッド。 今回使ったSQLは以下。 select count(*) from tb_test; 単純に count() を使ったSQLなんだけど、 これではダメなことに気づかなかった。count() は結果がなくても「0」という結果を返す…

in と exists の違い

in と exists の違いとは・・・in : 副問い合わせを評価した後に、親問い合わせへ結果を渡す。 exists : 親問い合わせを評価した後に、副問い合わせへ結果を渡す。なので、取得レコードを 親 or 副 のどちらで絞り込むかによって変わる。 副問い合わせで絞り…

group by と 特定の列 を表示

group by は集計処理に使われるので、 指定する列には集計関数を指定しなければならない。でも、集計とか関係なく特定の列を出力したいことがある。 その場合は max() or min() で無理やり出力させる。 select log_date, sum(point), man(name) from tb_test…

group by と case の併用

group by と case の併用をメモ。group by は 集計関数しか使えないので、 集計関数内に case を含める。以下は sum を例にする。 id ごとに point_type = 1 の場合のみ point を加算する。 select id, sum( case when point_type = 1 then point else 0 end…

distinct と count の併用

何か分からなかったのでメモ。 select count( distinct test_row) from tb_test; 特に説明はなし。

union と group by の併用

PostgreSQLで union + group by を使った時のメモ。普通に使うとできなかった・・・・。 order by が上手くいかない・・・。結論として、一度 union でデータを引っぱってテーブル化し、それを group by する。まずは必要なデータを普通に union する。 sele…

PHPでlocal接続

ハマった・・・。 PostgreSQLでは接続情報を以下のように文字列で渡す。 $info = 'host=sheep port=5432 dbname=mary user=lamb password=foo'; だが、なぜか接続できない。 apache権限(ブラウザから)で実行すると、エラー。 コンソールで直接実行すると、成…