Обсуждение: conditional logging based on client

Поиск
Список
Период
Сортировка

conditional logging based on client

От
"Rajesh Kumar Mallah"
Дата:
Hi,

We want to log all SQLs that has been executed by using psql client.
we do not want to use .psql_history as it is distributed and may be
deleted by users .

The original objective is that we should be able to know what all hand made
SQLs have  been executed in past  (which can date back as long as 1 year even)

regds
Mallah.

Re: conditional logging based on client

От
Achilleas Mantzios
Дата:
Στις Tuesday 22 July 2008 15:17:42 ο/η Rajesh Kumar Mallah έγραψε:
> Hi,
>
> We want to log all SQLs that has been executed by using psql client.
> we do not want to use .psql_history as it is distributed and may be
> deleted by users .
>
> The original objective is that we should be able to know what all hand made
> SQLs have  been executed in past  (which can date back as long as 1 year even)

You have to adjust log_statement in your postgresql.conf
however you will have to bear in mind the performance implications of this.
Normal production sites dont do this.
You can enable/disable this kind of logging any time by killing -HUP
>
> regds
> Mallah.
>



--
Achilleas Mantzios

Re: conditional logging based on client

От
Shane Ambler
Дата:
Achilleas Mantzios wrote:
> Στις Tuesday 22 July 2008 15:17:42 ο/η Rajesh Kumar Mallah
> έγ�αψε:
>> Hi,
>>
>> We want to log all SQLs that has been executed by using psql
>> client. we do not want to use .psql_history as it is distributed
>> and may be deleted by users .
>>
>> The original objective is that we should be able to know what all
>> hand made SQLs have  been executed in past  (which can date back as
>> long as 1 year even)
>
> You have to adjust log_statement in your postgresql.conf however you
> will have to bear in mind the performance implications of this.
> Normal production sites dont do this. You can enable/disable this
> kind of logging any time by killing -HUP

I am thinking that is a bit more than what you want. You can log all sql
statements run on a server but the server can't differentiate between
your custom-app sent sql and hand made sql sent through psql.

I know you can add things like remote address, username, dbname,
sessionid to the start of each log line but I don't know of getting the
client app name.


My thought would be to enable the statement logging and to modify your
client apps to have a set comment at the beginning and end of all sql
statements sent. You could then filter these sql statements out of the
logs leaving you with hand crafted sql.



--

Shane Ambler
pgSQL (at) Sheeky (dot) Biz

Get Sheeky @ http://Sheeky.Biz

Re: conditional logging based on client

От
"Rajesh Kumar Mallah"
Дата:
On Tue, Jul 22, 2008 at 5:54 PM, Achilleas Mantzios
<achill@matrix.gatewaynet.com> wrote:
> Στις Tuesday 22 July 2008 15:17:42 ο/η Rajesh Kumar Mallah έγραψε:
>> Hi,
>>
>> We want to log all SQLs that has been executed by using psql client.
>> we do not want to use .psql_history as it is distributed and may be
>> deleted by users .
>>
>> The original objective is that we should be able to know what all hand made
>> SQLs have  been executed in past  (which can date back as long as 1 year even)
>
> You have to adjust log_statement in your postgresql.conf
> however you will have to bear in mind the performance implications of this.
> Normal production sites dont do this.
> You can enable/disable this kind of logging any time by killing -HUP

thanks for reply.
any hit on performance is not desired.
is it possible to alter logging behaviour just for the
psql session ?

>>
>> regds
>> Mallah.
>>
>
>
>
> --
> Achilleas Mantzios
>

Re: conditional logging based on client

От
Shane Ambler
Дата:
Rajesh Kumar Mallah wrote:
> On Tue, Jul 22, 2008 at 5:54 PM, Achilleas Mantzios

>>> The original objective is that we should be able to know what all
>>> hand made SQLs have  been executed in past  (which can date back
>>> as long as 1 year even)
>> You have to adjust log_statement in your postgresql.conf however
>> you will have to bear in mind the performance implications of this.
>>  Normal production sites dont do this. You can enable/disable this
>> kind of logging any time by killing -HUP
>
> thanks for reply. any hit on performance is not desired. is it
> possible to alter logging behaviour just for the psql session ?
>

Not quite but the opposite could be a path to look down.

The config specifies logging statements that is applied to all sessions.
Your app could then be setup to alter this at run time.

I haven't tried this - it is only a theory - I would think that you
could create a function to turn off logging but you would also need to
look into restricting access to only your app (your app provides some
sort of code maybe).

The biggest problem here will be preventing users from performing this
command by hand in psql. This is where the function would allow a point
that must be 'authenticated' by your app.

http://www.postgresql.org/docs/8.3/interactive/functions-admin.html
and
http://www.postgresql.org/docs/8.3/interactive/view-pg-settings.html

as well as SECURITY DEFINER which is the reason for the function - it
must be run as a superuser.
http://www.postgresql.org/docs/8.3/interactive/sql-createfunction.html


Another option would be to have them use a different user name when
using psql. Probably not an option unless the app runs with it's own
username.



--

Shane Ambler
pgSQL (at) Sheeky (dot) Biz

Get Sheeky @ http://Sheeky.Biz

Re: conditional logging based on client

От
"Scott Marlowe"
Дата:
2008/7/22 Rajesh Kumar Mallah <mallah.rajesh@gmail.com>:
> On Tue, Jul 22, 2008 at 5:54 PM, Achilleas Mantzios
> <achill@matrix.gatewaynet.com> wrote:
>> Στις Tuesday 22 July 2008 15:17:42 ο/η Rajesh Kumar Mallah έγραψε:
>>> Hi,
>>>
>>> We want to log all SQLs that has been executed by using psql client.
>>> we do not want to use .psql_history as it is distributed and may be
>>> deleted by users .
>>>
>>> The original objective is that we should be able to know what all hand made
>>> SQLs have  been executed in past  (which can date back as long as 1 year even)
>>
>> You have to adjust log_statement in your postgresql.conf
>> however you will have to bear in mind the performance implications of this.
>> Normal production sites dont do this.
>> You can enable/disable this kind of logging any time by killing -HUP
>
> thanks for reply.
> any hit on performance is not desired.
> is it possible to alter logging behaviour just for the
> psql session ?

Set log_statement='ddl' in your postgresql.conf and pgsql will log all
ddl that hits the database.  It won't log other stuff, just the ddl.

Re: conditional logging based on client

От
Tom Lane
Дата:
"Scott Marlowe" <scott.marlowe@gmail.com> writes:
> 2008/7/22 Rajesh Kumar Mallah <mallah.rajesh@gmail.com>:
>> any hit on performance is not desired.
>> is it possible to alter logging behaviour just for the
>> psql session ?

> Set log_statement='ddl' in your postgresql.conf and pgsql will log all
> ddl that hits the database.  It won't log other stuff, just the ddl.

I think the OP didn't want *all* sessions doing this but just selected
sessions; so ALTER USER ... SET log_statement, or possibly
ALTER DATABASE ... SET, would perhaps serve better.

            regards, tom lane