[pgsql-jp: 38046] Re: データ移行時の文字コードエラーについて

ISHIDA Akio iakio @ mono-space.net
2007年 2月 20日 (火) 02:35:29 JST


こんにちは。石田@苫小牧市です。

07/02/19 に Toshihiro Kurai<tkurai @ taiyo-st.co.jp> さんは書きました:
> YuGoさん
>
> > これはPosgreSQLの問題というより、そのWEBアプリケーションの不備だと思いま
> > す。ユーザーが不正な文字を入れてきても受け付けないとか、適切に変換すると
> > かるべきではないでしょうか。
>
> こちらは別途考えさせていただきます。
>
> > とはいえ、そのアプリケーションは所与とすると、次のような荒技(無保証)を
> > 提案します。
> > 新旧のDBサーバを停止
> > pgsql/data/下のディレクトリを全部コピーして新しいDBに上書きする。
> > DBサーバを起動する。
> > 同じデータをSELECTして比較する。
> >
> > これがもし成功すれば、バイナリとしてのデータは元と同じなので誰も文句は言
> > わないでしょう。
>
> リスクを考えると面倒でもDBLINKを使用した方が
> 良さそうですね。
>

まずエラーの原因に関しては、PostgreSQLの文字コードに関する
チェックが厳しくなったためです。
DBLINKでエラーにならないのは(調べていませんが)、
INSERT INTO ... SELECT ... ではデータベースの外とのデータの
やりとりでは無いので(実際にはDBLINKが外のデータベースと
やりとりしていますが)、チェックを通らないのだと思います。

しかし、無理矢理壊れた文字列を入れることができたとしても、
文字コードのチェックはさまざまな箇所で行なわれるので、
予期せぬタイミングでその文字列を再びチェックしていエラーに
なってしまう可能性があります。

# まあエラーになってくれればまだ良いわけですが。

なので、壊れた文字コードをデータベースに入れることは
お勧めできません(し、入れるべきではないからエラーに
なっています)。
-- 
ISHIDA Akio <iakio @ mono-space.net/ishida @ cycleof5th.com>



pgsql-jp メーリングリストの案内