脱力系備忘録BloG ホーム  »  カテゴリ » DB

PostgreSQLで「invalid input syntax for type timestamp with time zone」  

というエラーが出た。
どうやってこのエラーが出たかと言うと、

select CURRENT_TIMESTAMP-'24 hours';

でエラーになりました。
正しくは、

select CURRENT_TIMESTAMP-interval '24 hours';

と書かなくちゃいけない。
これが足し算の場合

select CURRENT_TIMESTAMP+'24 hours';

は、エラーにならないんだなこれが。
まあ、

select CURRENT_TIMESTAMP+interval '24 hours';

と、「interval」を書くクセを付けた方が良いみたい。

ということで、思い込みによるバグは見つけるのが難しい一例でした。

category: DB

tag: PostgreSQL  Timestamp 
コメント: (0)   トラックバック: --

64ビット環境でのデータベースの符号付INTEGER型整数の範囲  

64ビット環境ではPHP符号付INTEGER型整数の上限は 9223372036854775807 になります。
PostgreSQLはどうなるんだろう?と思って調べてみたら 2147483647 でした。
PostgreSQLの場合、OSのビット数に関係なく「型宣言」で整数の範囲が決まるようです。

INTEGER → 2147483647
BIGINT → 9223372036854775807

気を付けなくちゃいけないのはPHPでビット操作をする場合。PostgreSQLのINTEGER型をPHPの変数に格納した時点で64ビット整数になります。
INTEGER型で「-1」は「0xffffffff」ですが、PHPの変数では「0xffffffffffffffff」になる。
注意が必要です。

ついでにSQlite3も調べてみました。
64ビット環境でのINTEGER型の上限は 9223372036854775807 です。

category: DB

tag: PostgreSQL  PHP  sqlite3  64ビット 
コメント: (0)   トラックバック: --

【PostgreSQL】SERIAL型とROLLBACK  

SERIAL型定義や「CREATE SEQUENCE」でシーケンスをつくり、トランザクション内で自動採番させたものをROLLBACKしても元に戻らない。

これは仕様。

そもそもシーケンスジェネレータは自動採番する仕組みを提供するだけで、連番を保障する仕組みではない。


ふむ(´・ω・`)
LOCK処理などで自分で制御しないとだめな模様。

category: DB

コメント: (0)   トラックバック: --

[PHP] DB - PEARとPDOのBOOLEAN型の扱いの違い  

PostgreSQLを使っているサイトの修正で躓いた。

今まではデータベースへのアクセスにPEAR:DBを使用している。
これをPDOに変更したらうまく動かない。

よく調べてみたら、「BOOLEAN」型項目の内容判定が正しく行われていない。

何故だろうと思い、それぞれのアクセス結果を見てみたら、ぬーん。

●PEAR::DBの場合
string("t")
string("f")

●PDOの場合
bool(true)
bool(false)

で返ってくる模様。

「BOOLEAN」型は使わず「INTEGER」型で定義したほうが素直でわかりやすいやね。

category: DB

コメント: (0)   トラックバック: --

Sqlite3データベース内に作ったテーブル一覧を表示したい  

どんなテーブルを作成していたかわからなくなることがある。
そんなときに便利なSQLコマンドがありました。

select * from sqlite_master;

これでデータベースの中のテーブルが全て丸見えに。うふふ。

category: DB

コメント: (0)   トラックバック: --

Sqlite3でDELETEを実行したけど戻り値FALSEで実行されない。  

いろいろ試してようやく気がついた。
Sqlite3は更新処理のときに一時ファイルを作成していたんですね。知らなかったよ。
例えば、「test.db」というデータベースファイル名の場合、「test.db-journal」という一時ファイルが作成される。

ということで、Sqlite3ファイル自体のパーミッションだけでなく、ディレクトリのパーミッションも適切に設定しておかないとダメということです。

え?常識?
ぃやん!

category: DB

コメント: (0)   トラックバック: --

SQlite3 自動採番の備忘録  

データベースには自動採番という機能がある。
PostgreSQLなら「SERIAL」というデータ型を指定すると、データをINSERTするたびに自動的に1、2、3、と数値が振られていく。
SQlite3にも同じような機能があるのだが、PostgreSQLのようにシンプルではないので備忘録。

-- 続きを読む --

category: DB

コメント: (0)   トラックバック: --

PostgreSQLとSQLite3とPDO  

SQLite3のREAL型カラムに、PHPのPDOの「bindParam」を使ってデータをINSERTするとき、データタイプに何を指定すればいいのかを調べるついでに、ちょっと気になったのでPostgreSQLとSQLite3の振る舞いの違いを調べてみた。

テーブルの構造は
カラム「a」「REAL」型
カラム「b」「INTEGER」型
です。

投入するデータは
$a = 10.05 →カラム「a」に投入
$b = 20.05 →カラム「b」に投入
とします。

-- 続きを読む --

category: DB

コメント: (0)   トラックバック: --

MySQLって大文字小文字認識しないの?  

仕事の都合で初めてMySQLを触った。
PostgreSQLを普段使いにしている自分は、いつものようにプログラムを書いてテストをしてみると何かおかしい。

んん?

大文字と小文字を認識してねー。

(´・ω・`)って気分でネットをさまよってみると、MySQLがそういう仕様になってたんですね。
で、認識させるためには「binary属性」というものをつけてあげないとダメなんだそうな。


なんでやねん。

このブログで知りました。ありがたやありがたや。
http://nayuzak.blog50.fc2.com/blog-entry-17.html

category: DB

コメント: (0)   トラックバック: --

プロフィール

最近の記事

最近のコメント

フルーツメール
ブログランキング・にほんブログ村へ
にほんブログ村

▲ Pagetop