2013/06/26

[PostgreSQL] IDを 0埋めで 登録し直す

既に 登録済みの ID(1~連番)を 1で始まる全10桁の数値に 振り直したい

例)
旧ID 新ID
1 10000000001
2 10000000002
3 10000000003
4 10000000004
5 10000000005

↑こんな感じ

UPDATE table_name SET id= cast(1||lpad(''||id, 9, '0') as bigint);

●解説
lpad(''||id, 9, '0') 
→ 左埋め '0'(引数3番目)で9桁(引数2番目)0埋め(3番目省略すると、空白で埋められる)
→ ''||id は、idがbigintのため ''空文字列を結合して stringにしてやる(lpadの引数1番目はstringじゃないと怒られる)

cast(1||lpad(''||id, 9, '0') as bigint)
→ 0埋め処理した文字列を cast()で bigintに戻してます

TwitterAPIが何度やっても 401「Failed to validate oauth signature and token」を返してくる

自戒の念を込めて メモ

TwitterAPIの廃止、ver1からver1.1へのアップデートの対応で
既存のサービスが利用している APIの調査確認をした時
ちゃんと ver1.1に合わせた設定に変えたのにもかかわらず
何度 リクエストしても 401「Failed to validate oauth signature and token」が返ってくる現象に悩まされ、
約半日を無駄にしたことがありました

結局原因は、リクエストを投げてるサーバのdateがずれていたという(約30分くらいずれていました)
しょーーーーーーもないことで・・・・自分で自分に腹が立つやら情けないやら・・・・

ということで、既存で動いていたAPIが いきなりエラーで動かなくなったよ!という時は、
まず
★TwitterAPIに限らず、たいていのAPIは リクエストトークンなどにタイムスタンプを含めていることが多いので、サーバのdateを確かめる!

それから、TwitterAPIの場合、テスト用アプリが BAN(停止)食らってると 401エラーになるそうなので、
★ちゃんとアプリが生きているか?もしくは、新規でアプリを作成して確認してみる

余談ですが、今回のver1.1への対応、
たいていのAPIは エンドポイントのバージョン番号部分を、1→1.1にすればOKですが

例)http(s)://api.twitter.com/1/*** → http(s)://api.twitter.com/1.1/***

それでも 「statuses/update_with_media」←このAPIがエラーで、リクエストが取得できなくて、
公式をよくよく確認したら ドメイン部分も変更になっていました

●statuses/update_with_media
https://upload.twitter.com/1/statuses/update_with_media.json
 ↓
https://api.twitter.com/1.1/statuses/update_with_media.json

やっぱり、公式のドキュメントを確認するのが確実です

●REST API v1.1 Resources | Twitter Developers https://dev.twitter.com/docs/api/1.1

参考)
Twitter APIと開発者規約変更のインパクトまとめ:結局、Twitter API 1.1で何が変わる? 5つのポイント - @IT
http://www.atmarkit.co.jp/ait/articles/1209/26/news120.html