1

すべてのデータを含む PostgreSQL データベースを MySQL データベースに移動しようとしているため、MySQL Workbench > Data migration ツールを使用しています。

「ソースのリバース エンジニア」ステップで、奇妙なエラーが発生しました。

ERROR: Reverse engineer selected schemata: ProgrammingError("('42P01', '[42P01] ERROR: relation "public.psqlcfg_lid_seq" does not exist;\nError while executing the query (7) (SQLExecDirectW)')"): error calling Python module function DbPostgresqlRE.reverseEngineer Failed

このエラー メッセージが最後に表示される完全なエラー ログは次のとおりです。

Starting...
Connect to source DBMS...
- Connecting...
Connecting to ...
Opening ODBC connection to DSN=InventoryDBDS...
Connected
Connect to source DBMS done
Reverse engineer selected schemata....
Reverse engineering public from InventoryDB
- Reverse engineering catalog information
Traceback (most recent call last):
  File "C:\Program Files\MySQL\MySQL Workbench CE 6.0.6\modules\db_postgresql_re_grt.py", line 335, in reverseEngineer
return PostgresqlReverseEngineering.reverseEngineer(connection, catalog_name, schemata_list, context)
File "C:\Program Files\MySQL\MySQL Workbench CE 6.0.6\modules\db_generic_re_grt.py", line 228, in reverseEngineer
catalog = cls.reverseEngineerCatalog(connection, catalog_name)
File "C:\Program Files\MySQL\MySQL Workbench CE 6.0.6\modules\db_generic_re_grt.py", line 388, in reverseEngineerCatalog
cls.reverseEngineerSequences(connection, schema)
File "C:\Program Files\MySQL\MySQL Workbench CE 6.0.6\modules\db_postgresql_re_grt.py", line 76, in reverseEngineerSequences
min_value, max_value, start_value, increment_by, last_value, is_cycled, ncache = cls.execute_query(connection, seq_details_query % (schema.name, seq_name)).fetchone()
File "C:\Program Files\MySQL\MySQL Workbench CE 6.0.6\modules\db_generic_re_grt.py", line 76, in execute_query
return cls.get_connection(connection_object).cursor().execute(query, *args, **kwargs)
pyodbc.ProgrammingError: ('42P01', '[42P01] ERROR: relation "public.psqlcfg_lid_seq" does not exist;\nError while executing the query (7) (SQLExecDirectW)')

Traceback (most recent call last):
File "C:\Program Files\MySQL\MySQL Workbench CE 6.0.6\workbench\wizard_progress_page_widget.py", line 192, in thread_work
self.func()
File "C:\Program Files\MySQL\MySQL Workbench CE 6.0.6\modules\migration_schema_selection.py", line 160, in task_reveng
self.main.plan.migrationSource.reverseEngineer()
File "C:\Program Files\MySQL\MySQL Workbench CE 6.0.6\modules\migration.py", line 335, in reverseEngineer
self.state.sourceCatalog = self._rev_eng_module.reverseEngineer(self.connection,     self.selectedCatalogName, self.selectedSchemataNames, self.state.applicationData) SystemError: ProgrammingError("('42P01', '[42P01] ERROR: relation "public.psqlcfg_lid_seq" does not exist;\nError while executing the query (7) (SQLExecDirectW)')"): error calling      
Python module function DbPostgresqlRE.reverseEngineer
ERROR: Reverse engineer selected schemata: ProgrammingError("('42P01', '[42P01] ERROR: relation "public.psqlcfg_lid_seq" does not exist;\nError while executing the query (7) (SQLExecDirectW)')"): error calling Python module function DbPostgresqlRE.reverseEngineer  Failed

ログに表示される (エラー 42P01) に関連するものを Web で検索しましたが、参照が見つかりませんでした。ですから、誰かが私がここで間違っていることを正確に教えてくれれば、それは本当に素晴らしいことです.

ありがとう

4

2 に答える 2

3

このエラーは私をここに連れてきます。

「psqlcfg_lid_seq」が実際に大文字と小文字の両方を含む場合、PostgreSQL はクエリのために名前をすべて小文字に変換することに注意してください。

基本的な知識は次のとおりです。大文字と小文字が一致するクエリを実行するには、名前を二重引用符 (") で囲む必要があるため、変換が回避されます。

しかし、MySQL Workbench では、シーケンスをフェッチしようとすると、それを忘れてしまいます。

db_postgresql_re_grt.py。Windows の %Program Files%\MySQL\MySQL Workbench (お使いのバージョン、たとえば「6.1 CE」)\modules にあります。

70 行目あたりで、変数seq_details_queryに SQL クエリが見つかります。次のようになります。

        seq_details_query = """SELECT min_value, max_value, start_value, 
increment_by, last_value, is_cycled, cache_value
FROM %s.%s"""

それを次のように変更します。

        seq_details_query = """SELECT min_value, max_value, start_value, 
increment_by, last_value, is_cycled, cache_value
FROM \"%s\".\"%s\""""

したがって、シーケンスを取得できるため、フロー全体を続行できます。

変更したスクリプトを使用するには、MySQL Workbench を再起動する必要がある場合があります。

MySQL 関係者がまだこの問題を解決していないことに驚いています。たぶん、どうにかしてバグを報告する必要がありますか?:P

于 2014-08-02T12:21:29.133 に答える