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

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

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

2回答

7152閲覧

postgresの構文エラーについて

yamatb

総合スコア9

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2019/04/16 11:08

編集2019/04/17 00:29

前提・実現したいこと

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

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

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

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

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

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

該当のソースコード

postgreSQL

1INSERT 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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

standard_conforming_stringsの設定です。

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

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

投稿2019/04/16 13:23

編集2019/04/17 02:46
sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamatb

2019/04/17 00:22

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

2019/04/17 03:06 編集

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

2019/04/17 04:27

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

0

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

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

投稿2019/04/16 12:07

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamatb

2019/04/17 00:24

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問