2017-07-11 6 views
0

タイ語と英語の両方を含むMySQL UTF8mb4データベースをPostgresqlに変換しようとしています。これは、私が試して、tsearchを追加するまで、 になるようです。私が取ったステップの概要を説明しましょう。Postgresqlエンコーディングの問題tgarchを使用したtsearchの使用Pgloaderを使用したMariaDBからの変換後

  • 私が原因彼らが行方不明 であることにPostgreSQLのつまずかいくつか列挙値を修正
  • MariaDB
  • にダンプファイルからローカル生産のコピーを復元 https://github.com/zdk/pg-search-thai
  • このタイパーサをインストールします。 MariaDBはpgloaderが優雅にそれらに対処しないよう
  • が テキスト形式にいくつかのポリゴンを変換し、それら:(に満足している。新鮮なPostgreSQLデータベースに対して -run pgloader、TESTDB

    pgloader mysql://$MYSQL_USER:[email protected]/$MYSQL_DB postgresql://$PG_USER:[email protected]/testdb

これはうまくいくように見えますが、Laravelのサイトは機能しているようですが、MariaDBとPostgresqlの制約の違いのために、 の違いにより修正するバグがありますが、tsearchのテキストベクトルを作成しようとすると、 エンコードの問題。これは私がアドバイスが必要なところです。私はそのテーブルをダンプし、私はエンコードのエラーを取得しない新しいPostgreSQLデータベースにリストアする場合は

-- trying to create minimal case, dumping Thai names into a temporary table 
CREATE EXTENSION thai_parser; 
CREATE TEXT SEARCH CONFIGURATION thai_unstemmed (PARSER = thai_parser); 
ALTER TEXT SEARCH CONFIGURATION thai_unstemmed ADD MAPPING FOR a WITH simple; 

-- to test the parser is working, which it is 
SELECT to_tsvector('thai_unstemmed', 'ข้าวเหนียวส้มตำไก่ย่าง ต้มยำกุ้ง in thailand'); 

-- to recreate my error I did this 
CREATE TABLE vendor_names AS SELECT id,name from vendors_i18n; 
ALTER TABLE vendor_names ADD COLUMN tsv_name_th tsvector; 

-- this fails 
UPDATE vendor_names SET tsv_name_th=to_tsvector('thai_unstemmed', coalesce(name, '')); 

私が手にエラーがERROR: invalid byte sequence for encoding "UTF8": 0x80

です。

質問:

  • pgloaderはPostgreSQLするUTF8mb4に使用する正しいエンコーディングとは何ですか?
  • 上記以外の正しいUTF8のデータをチェックする方法はありますか?
  • タイパーサーツールで問題が発生していますか?

これを解決する方法についてのご意見はありがとうございます。

乾杯、

ゴードン

PSは、私が経験豊富な開発者ではなく、経験豊富なDBAです。

+0

ヘックス '80'のコンテキストを見つけることはできますか?おそらくそれはより大きな文字列の一部ですか? –

答えて

0

データセットを手動でインポートして、正常にインポートされた行と失敗した行を確認しましたか? インポートが成功しても他のものが失敗すると、データの整合性の問題があるように見えます。

が正しくインポートされていない場合は、明らかにエンコードの問題です。

関連する問題