質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.61%

postgresの構文エラーについて

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,250

yamatb

score 9

前提・実現したいこと

現在、稼働中のCentOSのサーバが1台あります。
CentOSにはpostgreSQLがインストールされています。

稼働中のサーバと同一バージョンのサーバをもう1台用意し、
postgreSQLも同一のバージョンをインストールした所、
下記のような現象が起き、解決出来ません。

稼働中のサーバに同一のクエリを実行してもエラーは発生しません。

追記
稼働中のサーバでは、C#のプログラムでpostgreSQLを使用しております。
同じC#のプログラムを、用意したもう1台のサーバ(今回ご相談しているサーバ)でも利用したいです。
ただ、C#のプログラムに変更を加えたくないので、
SQL自体の改変ではなく、サーバ設定での改変で同一の動作をさせたいと考えております。

発生している問題・エラーメッセージ

postgresのデータベースのリストアや、"\"バックスラッシュを含むINSERT文等で下記の構文エラーが発生します。

ERROR: syntax error at or near "XXX"

該当のソースコード

INSERT INTO m_application (appname,filename,path,version,kubun) values ('XXX','XXX','\XXX\','XXX','XXX')

試したこと

①postgreSQLの再インストール
②EncodeやCollate、Ctypeが稼働中のサーバと同一か確認。
Encode=UTF8, Collate=C, Ctype=C
③postgresql.confやpg_hba.confの設定情報が稼働中のサーバと同一か確認。
④サーバの再起動

補足情報(FW/ツールのバージョンなど)

OS:centOS 6.9
SQL:postgreSQL 9.5

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

standard_conforming_stringsの設定です。

\がエスケープとして扱われてエラーとなっています。

postgresql.confが同じなら、alter databaseなどのコマンドで独自に設定されているのでしょう。
PostgreSQL 特定のデータベースやユーザのみパラメータの設定値を変更する方法

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/17 09:22

    ご回答ありがとうございます。
    standard_conforming_stringsの設定はoffになっています。
    改めてalter databaseコマンドでoffにしましたが、同じエラーが発生しております。

    キャンセル

  • 2019/04/17 11:43 編集

    稼働しているサーバーと新しいサーバーのstandard_conforming_stringsの状態を確認して下さい。
    ※確認用のSQLのサンプルがリンク先にあります。

    キャンセル

  • 2019/04/17 13:27

    ご回答ありがとうございます。
    standard_conforming_stringsをonに変更したら正常に動作しました。
    大変助かりました。ありがとうございました。

    キャンセル

0

4.1. 字句の構造
4.1.2.2. C形式エスケープでの文字列定数
にある表記に引っかかってないかご確認を。

対策としては、同じページに有る
4.1.2.4. ドル記号で引用符付けされた文字列定数
の項目に沿って、$$で括るようにすれば良いかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/17 09:24

    ご回答ありがとうございます。
    $$で括るようにすれば構文エラーは発生しなくなり、正常に登録が行えました。
    ただ、申し訳ございません。
    当方の前提条件の漏れがありました。
    2つのサーバで同一のプログラムを動作させたい為、SQL自体を変更する事が出来ません。
    サーバの設定で同じ動作にする事が出来ないでしょうか。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る