0

理由もなく失敗し始めたストアド プロシージャがあります。あるはずなのに見つからない!

これは、私が以前に何度も行ったプロセスであり、問​​題はありません。

ソース サーバーは正常に動作します。

ソース サーバーでデータベースの pg_dump を実行し、それを別のサーバーにインポートしました。これで問題ありません。すべてのデータを表示し、更新を行うことができます。

次に、インポートされたデータベースでストアド プロシージャを実行します。このストアド プロシージャは、2 つの同一のスキーマを持つデータベースで次の処理を行います。

For each table in schema1
    Truncate table in schema2
    INSERT  INTO schema2."table" SELECT *  FROM schema1."table" WHERE "Status" in ('A','N');
Next

ただし、以前はエラーが発生しなかったのに、これによりエラーが発生します-エラーは

***エラー** *

エラー: 列 "HBA" はブール型ですが、式は整数型です SQL 状態: 42804 ヒント: 式を書き直すかキャストする必要があります。

これが得られる理由 - 前回この手順に従ったときと今回の唯一の違いは、問題のテーブルに余分な列が追加されたため、「HBA」ブール列が最後のフィールドではないことです。しかし、なぜ元のデータベースで機能するのでしょうか!

すべてのデータを削除し、テーブルを削除して再構築しようとしましたが、これらはすべて失敗しました。ただし、列をドロップして追加すると、機能する場合-最後のフィールドである必要があることを意味するブールフィールドについて何かがあります!

どんな助けでも大歓迎です。

Postgres 9.1 の使用

4

1 に答える 1

0

ここでの問題 - 異なるスキーマのテーブルの列の順序が異なっていました。

列リストと順序を明示的に指定しない場合INSERT INTO table(...)SELECT *、テーブルの列の順序に依存しています (なぜそれが悪いことなのかがわかります)。

あなたは次のようなことをしようとしていました

INSERT INTO schema2.table1(id, bool_column, int_column) -- based on the order of columns in schema2.table1
select id, int_column, bool_column -- based on the order of columns in schema1.table1
from schema1.table1;

そして、列の型が一致しないため、そのようなクエリはキャストエラーを引き起こしました。

于 2013-09-11T15:12:57.810 に答える