#1. Windows:

My guess because the LocalSystem user does not have permissions on your:
%APPDATA%/postgresql/pgpass.conf
file. This seems to be confirmed by it working when you run pgagent as the
login user.
Also:
passfile
    Specifies the name of the file used to store passwords (see Section
33.15). Defaults to ~/.pgpass, or %APPDATA%\postgresql\pgpass.conf on
Microsoft Windows. (No error is reported if this file does not exist.)


Does that mean we can not use pgagent (when installed)  as a  "LocalSystem"
service account and define PGPASSFILE to a valid accessible location. ?
Since I have tried copying pgpass.conf file to  C:\pgpass.conf and defined
PGPASSFILE=C:\pgpass.conf
Still it was throwing no password supplied error.


#2. Linux
What happens if from the terminal as the postgres user you do?:
/path/to/pgagent 'connection string'

pgagent is throwing the same error from terminal as a postgres user as
well. I have enabled debugging logging mode. It's not showing me which
password file it's trying to access.

When I run psql from postgres user; It works fine.

*/usr/bin/pgagent_96 -f -l 2 hostaddr=127.0.0.1 dbname=linuxpostgresdb
user=postgres port=5432*
DEBUG: Creating primary connection
DEBUG: Connection Information:
DEBUG:      user         : postgres
DEBUG:      port         : 5432
DEBUG:      host         : 127.0.0.1
DEBUG:      dbname       : linuxpostgresdb
DEBUG:      password     :
DEBUG:      conn timeout : 0
DEBUG: Connection Information:
DEBUG:      user         : postgres
DEBUG:      port         : 5432
DEBUG:      host         : 127.0.0.1
DEBUG:      dbname       : linuxpostgresdb
DEBUG:      password     :
DEBUG:      conn timeout : 0
DEBUG: Creating DB connection: user=postgres port=5432 hostaddr=127.0.0.1
dbname=linuxpostgresdb
WARNING: Couldn't create the primary connection (attempt 1): fe_sendauth:
no password supplied
DEBUG: Clearing all connections
DEBUG: Connection stats: total - 1, free - 0, deleted - 1

*# psql command is running fine:*
psql -h 127.0.0.1 -d linuxpostgresdb -U postgres

psql (8.4.20, server 9.6.6)
WARNING: psql version 8.4, server version 9.6.
         Some psql features might not work.
Type "help" for help.

linuxpostgresdb=#




On Tue, May 29, 2018 at 3:32 PM, Adrian Klaver <adrian.kla...@aklaver.com>
wrote:

> On 05/29/2018 12:14 PM, nageswara Bandla wrote:
>
>> The intention of this post is to find out ways to run pgagent without
>> passing password in its connection string.
>>
>> *Windows:*
>>
>> I have installed pgagent on windows and configured to run under Local
>> System account.
>>
>> Command:-
>>
>> C:\PostgreSQL\bigsql\pgagent\bin\pgagent.exeINSTALL pgagent -l 2 -u
>> LocalSystem hostaddr=127.0.0.1 dbname=postgresdb user=postgres
>>
>> I have logged into my windows account; where my profile has pgpass.conf
>> in %APPDATA%/postgresql/pgpass.conf file.
>>
>> 127.0.0.1:5432:*:postgres:postgres1
>>
>> Pgagent is not started and throws error –“The pgagent service on Local
>> Computer started and then stopped. Some services stop automatically if they
>> are not in use by other services or programs”.
>>
>> Eventvwr log messages have these error messages - “Couldn't create the
>> primary connection (attempt 10): fe_sendauth: no password supplied”
>>
>> *PGPASSFILE env variable:*
>>
>> As per the link- (https://www.postgresql.org/do
>> cs/9.6/static/libpq-pgpass.html) I set PGPASSFILE environment variable
>> to point to pgpass.conf location. Even then, it’s throwing same above error
>> message. I have found out that pgagent is not reading pgpass.conf file when
>> configured under LocalSystem account.
>>
>> When I change the properties of the pgagent service to run under my login
>> user account. Then, it’s reading pgpass.conf file under
>> %APPDATA%/postgresql/pgpass.conf.
>>
>> I am clueless, why pgagent is not honoring PGPASSFILE env variable.
>>
>
> My guess because the LocalSystem user does not have permissions on your:
>
> %APPDATA%/postgresql/pgpass.conf
>
> file. This seems to be confirmed by it working when you run pgagent as the
> login user.
>
> Also:
>
> passfile
>
>     Specifies the name of the file used to store passwords (see Section
> 33.15). Defaults to ~/.pgpass, or %APPDATA%\postgresql\pgpass.conf on
> Microsoft Windows. (No error is reported if this file does not exist.)
>                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
>
>
>
>> *Linux:*
>>
>> In Linux, I have installed pgagent_96 using yum command. And tried to run
>> pgagent using command /etc/init.d/pgagent_96 from postgres user account.
>>
>
> This is going to depend on what pgagent_96 is doing?
>
>
>> It fails with error message – “WARNING: Couldn't create the primary
>> connection (attempt 2): fe_sendauth: no password supplied”
>>
>
> What happens if from the terminal as the postgres user you do?:
>
> /path/to/pgagent 'connection string'
>
>
>
>> I made sure that I have .pgpass configuration file with 0600 permissions
>> in postgres user home directory.
>>
>> I have tried by defining PGPASSFILE env variable in postgres user
>> account. But it’s not working.
>>
>> Pgagent is starting only when we pass password in it’s connection string.
>> But which is not a good practice at all.
>>
>>
>>
>
> --
> Adrian Klaver
> adrian.kla...@aklaver.com
>

Reply via email to