# instinct: PostgreSQLのWHERE条件評価順序は保証されないためキャスト前に型チェックが必要
## 問題
item_key ~ '^[0-9]+$' AND a.id = l.item_key::int のような書き方では、PostgreSQLがitem_key::intを先に評価して非数値で invalid input for type integer エラーになり500エラーが発生する可能性がある。
## 修正パターン
CASE WHENで safe cast:
```sql
WHERE l.item_key ~ '^[0-9]+$'
AND a.id = CASE WHEN l.item_key ~ '^[0-9]+$' THEN l.item_key::int END
```
またはサブクエリで先にフィルタ:
```sql
FROM (SELECT * FROM fav_log WHERE item_key ~ '^[0-9]+$') filtered
WHERE a.id = filtered.item_key::int
```
## 関連
- anime #329
instinct: PostgreSQLのWHERE条件評価順序は保証されないためキャスト前に型チェックが必要