Fix string escape problem with PostgreSQL >= 9.1 and standard_conforming_strings=on

fixes #9244
This commit is contained in:
Michael Friedrich 2015-09-05 14:08:35 +02:00
parent 35bc567406
commit e06375d76f
2 changed files with 11 additions and 2 deletions

View File

@ -408,6 +408,7 @@ RHEL/CentOS 5/6:
RHEL/CentOS 7:
# yum install postgresql-server postgresql
# postgresql-setup --initdb
# systemctl enable postgresql
# systemctl start postgresql
@ -471,7 +472,7 @@ authentication method and restart the postgresql server.
# IPv6 local connections:
host all all ::1/128 ident
# /etc/init.d/postgresql restart
# service postgresql restart
After creating the database and permissions you can import the Icinga 2 IDO

View File

@ -217,8 +217,16 @@ void IdoPgsqlConnection::Reconnect(void)
BOOST_THROW_EXCEPTION(std::runtime_error(message));
}
IdoPgsqlResult result;
/* explicitely require legacy mode for string escaping in PostgreSQL >= 9.1
* changing standard_conforming_strings to on by default
*/
if (PQserverVersion(m_Connection) >= 90100)
result = Query("SET standard_conforming_strings TO off");
String dbVersionName = "idoutils";
IdoPgsqlResult result = Query("SELECT version FROM " + GetTablePrefix() + "dbversion WHERE name=E'" + Escape(dbVersionName) + "'");
result = Query("SELECT version FROM " + GetTablePrefix() + "dbversion WHERE name=E'" + Escape(dbVersionName) + "'");
Dictionary::Ptr row = FetchRow(result, 0);