On 15 May 2015 at 11:20, Pavel Stehule <pavel.stehule@gmail.com> wrote: > > > 2015-05-15 12:14 GMT+02:00 Thom Brown <thom@linux.com>: >> >> On 15 May 2015 at 10:56, Pavel Stehule <pavel.stehule@gmail.com> wrote: >> > Hi >> > >> > I am testing it, and output is strange >> > >> > 2015-05-15 11:49:25.046 CEST pavel postgres: LOG: AUDIT: >> > SESSION,1,1,DDL,DROP TABLE,,,drop table foo;,<not logged> >> > 2015-05-15 11:49:25.046 CEST pavel postgres: STATEMENT: drop table foo; >> > 2015-05-15 11:49:28.291 CEST pavel postgres: LOG: AUDIT: >> > SESSION,2,1,DDL,CREATE TABLE,,,"CREATE TABLE foo(a int, b int);",<not >> > logged> >> > 2015-05-15 11:49:28.291 CEST pavel postgres: STATEMENT: CREATE TABLE >> > foo(a >> > int, b int); >> > 2015-05-15 11:49:31.486 CEST pavel postgres: LOG: AUDIT: >> > SESSION,3,1,WRITE,INSERT,,,"INSERT INTO foo VALUES(10,20);",<not logged> >> > 2015-05-15 11:49:31.486 CEST pavel postgres: STATEMENT: INSERT INTO foo >> > VALUES(10,20); >> > 2015-05-15 11:49:33.446 CEST pavel postgres: LOG: AUDIT: >> > SESSION,4,1,READ,SELECT,,,SELECT * FROM foo WHERE a = 10;,<not logged> >> > 2015-05-15 11:49:33.446 CEST pavel postgres: STATEMENT: SELECT * FROM >> > foo >> > WHERE a = 10; >> > >> > I am missing object name, unexpected string <not logged> >> > >> > configuration: >> > pg_audit.log = 'read, write, ddl' >> >> From what I can tell, that last value should be for parameters. You'd >> need to set pg_audit.log_parameter to on, and then prepare and execute >> a statement with a parameter. > > > yes > > 2015-05-15 12:18:39.545 CEST pavel postgres: LOG: AUDIT: > SESSION,1,1,READ,PREPARE,,,prepare x(int) as select * from foo where a = > $1;,<none> > 2015-05-15 12:18:39.545 CEST pavel postgres: STATEMENT: prepare x(int) as > select * from foo where a = $1; > 2015-05-15 12:18:48.065 CEST pavel postgres: LOG: AUDIT: > SESSION,2,1,READ,SELECT,,,prepare x(int) as select * from foo where a = > $1;,10 > 2015-05-15 12:18:48.065 CEST pavel postgres: STATEMENT: execute x(10); > > but when pg_audit.log_parameter is off, then this value should be empty
If it were empty, it would then be indistinguishable from a statement executed with a single parameter passed as an empty string.
I am thinking about situation when pg_audit.log_parameter is disabled
Speaking of which, I notice that nulls show up as nothing too. How does one distinguish between an empty string and a null in the logs?