I am trying to programmatically create the postgresql (9.2) "pg_hba.conf" file during our install.
I have tried to create the file using the following:
(yes, the Windows 8.1 User Name has a space and an apostrophe)
private static string[] CreatePgHbaContents()
{
string[] configLines =
{
"# TYPE DATABASE USER ADDRESS METHOD",
string.Format("host all \"Mi k'e\" 127.0.0.1/32 sspi"),
string.Format("host all \"Mi K'e\" ::1/128 sspi"),
"",
string.Format("host all \"SYSTEM\" 127.0.0.1/32 sspi"),
string.Format("host all \"SYSTEM\" ::1/128 sspi"),
};
return configLines;
}
However, I am getting an error when I try to create the database:
[PostgreConfig:878ab49a][2015-06-11T13:00:08.500-07:00][Error][5b4:1]:Npgsql.NpgsqlException:
unterminated quoted string at or near "e')::name);"
Severity: ERROR
Code: 42601
Any suggestions as to how the user name can be formatted in the configuration file to allow a single quote would be greatly appreciated.
The unterminated quoted string at or near "e' is due to PostGres seeing the single quote, and terminating the statement.
When entering text into a VARCHAR field, I usually replace the single quote with a backtick (` rather than '), which stops this from cropping up at all, but if the quote is in the user name, it's a significant character, so swapping it would break the authentication.
The solution is to escape the single quote with another single quote.
I'm a little puzzled by why you have a String.Format in there. You are not actually formatting the string, so it's not necessary.
If you did want to use String.format...