MySQLとPostgreSQLの両方で次のSQLステートメントを使用しましたが、PostgreSQLでは失敗します
db.Query(`SELECT COUNT(*) as N FROM email WHERE address = ?`, email)
このエラーで:
pq: F:"scan.l" M:"syntax error at end of input" S:"ERROR" C:"42601" P:"50" R:"scanner_yyerror" L:"993"
どうしたの? PostgreSQLのエラーメッセージは非常にわかりにくいです。
言語/環境についての詳細は提供していませんが、とにかくワイルドな推測を試みます。
MySQLの準備されたステートメントは、パラメータープレースホルダーとして?
をネイティブで使用しますが、PostgreSQLは$1
、$2
などを使用します。?
を$1
で置き換えて、機能するかどうか確認してください。
WHERE address = $1
PostgreSQLのエラーメッセージは非常にわかりにくいです。
一般的に、Postgresのエラーメッセージは競合する製品(ahem、MySQL、および特に Oracle)よりも優れていることがわかりましたが、この例では、正常性を超えてパーサーを混乱させています。 :)
Goを使用していますか?
試してください:
db.Query(`SELECT COUNT(*) as N FROM email WHERE address = $1`, email)
私たちが使用しているクエリのgolangでは
私の場合は、データベースとの対話を担当するプログラムがクエリの複数行をすべて1つの巨大な行として読み取る-行コメントを使用したことが原因でした。これは、行コメントにより残りのクエリが破損したことを意味します。修正は、代わりに/ *ブロックコメント* /を使用することでした。