1. ホーム
  2. エラーの報告

Mybatis から Postgres への接続で ERROR: リレーション "xxx テーブル名" が存在しないことが報告されました。

2022-02-26 03:59:53
<パス

mybatisのmapper.xmlに検証済みのクエリ文を書くと、次のようなエラーが発生します。

org.postgresql.util.PSQLException: ERROR: relation "xxx_tablename" does not exist


まず第一に、クエリ文は、データベースでチェックされている、そこに問題はありませんが、データベース内のこのテーブルもあり、なぜそれが常にこのエラーが報告されている?長い間、Webを検索した後、一般的な話は次のとおりです。
1.pgは大文字と小文字を区別しており、これは正しい、問題ない。
2。元のデータベースとの競合がテーブルに付属している可能性があり、これはまた、テーブルが自分の新しい、テーブル名が競合していない除外されます。
3. テーブルのキーと他のテーブルの間に依存関係があり、これも存在しない。
様々な主張を投稿で確認したが、うまくいかなかった。
後で知ったのですが、pyライブラリのクエリはテーブル名の前にスキーマ名、つまりこのテーブルはどのスキーマに属しているのかを追加する必要があり、そうしないとクエリ時にテーブルが見つからないことがあるそうです。
この時点で問題は解決し、同じエラーが1つの理由でないとは限らないことがわかりました

付録です。
スキーマの紹介
データベースにおいて、スキーマ(中国語ではschemaと呼ばれる)はデータベースの組織や構造のことで、スキーマとスキーマタはいずれも複数形として使うことができる。スキーマにはスキーマオブジェクトがあり、テーブル、カラム、データ型、ビュー、ストアドプロシージャ、リレーションシップ、主キー、外部キーなどがある。など)。

SchemaとDataBaseは同等ですか?
スキーマとデータベースには違いがあるのか、あるとすればそれは何なのか、という疑問がしばしば生じます。

データベースのプロバイダに依存する
スキーマに関する混乱の一因は、データベースシステムが独自の方法でスキーマを処理する傾向があることです。

(1) MySQLのドキュメントには、物理的にはスキーマはデータベースと同義であると書かれているため、スキーマとデータベースは同じものであると言えます。

(2) しかし、Oracleのドキュメントには、特定のオブジェクトはデータベースに格納できるが、スキーマには格納できないと記載されています。したがって、スキーマとデータベースは同じものではありません。

(3) また、このSQL Serverの技術記事、SQLServer technical articleによると、スキーマはデータベースSQL Serverの中の別個の存在である。ですから、この2つも同じものではありません。

ですから、使用するRDBMSによっては、スキーマとデータベースが同じでない場合もあります。