Re: [HACKERS] Table-level log_autovacuum_min_duration

2015-04-03 Thread Michael Paquier
On Fri, Apr 3, 2015 at 5:57 AM, Alvaro Herrera wrote:
 You added this in the worker loop processing each table:

 /*
  * Check for config changes before processing each collected 
 table.
  */
 if (got_SIGHUP)
 {
 got_SIGHUP = false;
 ProcessConfigFile(PGC_SIGHUP);

 /* shutdown requested in config file? */
 if (!AutoVacuumingActive())
 break;
 }

 I think bailing out if autovac is disabled is a good idea; for instance,
 if this is a for-wraparound vacuum, we should keep running.  My first
 reaction is that this part of the test ought to be moved down a
 screenful or so, until we've ran the recheck step and we have the
 for-wraparound flag in hand; only bail out if that one is not set.  But
 on the other hand, maybe the worker will process some tables that are
 not for-wraparound in between some other tables that are, so that might
 turn out to be a bad idea as well.  (Though I'm not 100% that it works
 that way; consider commit f51ead09df for instance.)  Maybe the test to
 use for this is something along the lines of if autovacuum was enabled
 before and is no longer enabled, bail out, otherwise keep running.
 This implies that we need to keep track of whether autovac was enabled
 at the start of the worker run.

I did consider the case of wraparound but came to the conclusion that
bailing out as fast as possible was the idea. But well, I guess that
we could play it safe and not add this check after all. The main
use-case of this change is now to be able to do re-balancing of the
cost parameters. We could still decide later if a worker could bail
out earlier or not, depending on what.

 Another thing, but not directly related to this patch: while looking at
 the doc changes, I noticed that we don't have index entries for the
 reloptions we have; for instance, the word fillfactor doesn't appear
 in the bookindex.html page at all.  Having these things all crammed in
 the CREATE TABLE page seems somewhat poor.  I think we could improve on
 this by having a listing of settable parameters in a separate section,
 and have CREATE TABLE, ALTER TABLE, and the Server Configuration chapter
 link to that; we could also have index entries for these items.
 Of course, the simpler fix is to just add a few indexterm tags.

This sounds like a good idea, and this refactoring would meritate a
different patch and a different thread. I guess that it should be a
new section in Server Configuration then, named Relation Options,
with two different subsections for index options and table options.

 As a note, there is no point to Assert(foo != NULL) tests when foo is
 later dereferenced in the same routine: the crash is going to happen
 anyway at the dereference, so it's just a LOC uselessly wasted.

Check. I still think that it is useful in this case though... But removed.

 I think this could use some wordsmithing; I didn't like listing the
 parameters explicitely, and Jaime Casanova suggested not using the terms
 inherit and parent table in this context.  So I came up with this:
   Note that the TOAST table uses the parameter values defined for the main
   table, for each parameter applicable to TOAST tables and for which no
   value is set in the TOAST table itself.

Fine for me.
-- 
Michael
From f43fc9a5a5e0ffb246782010b8860829b8304593 Mon Sep 17 00:00:00 2001
From: Michael Paquier mich...@otacoo.com
Date: Fri, 3 Apr 2015 14:21:12 +0900
Subject: [PATCH 1/2] Add palloc_extended and pg_malloc_extended for frontend
 and backend

This interface can be used to control at a lower level memory allocation
using an interface similar to MemoryContextAllocExtended, but this time
applied to CurrentMemoryContext on backend side, while on frontend side
a similar interface is available.
---
 src/backend/utils/mmgr/mcxt.c| 37 ++
 src/common/fe_memutils.c | 43 ++--
 src/include/common/fe_memutils.h | 11 ++
 src/include/utils/palloc.h   |  1 +
 4 files changed, 81 insertions(+), 11 deletions(-)

diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c
index e2fbfd4..c42a6b6 100644
--- a/src/backend/utils/mmgr/mcxt.c
+++ b/src/backend/utils/mmgr/mcxt.c
@@ -864,6 +864,43 @@ palloc0(Size size)
 	return ret;
 }
 
+void *
+palloc_extended(Size size, int flags)
+{
+	/* duplicates MemoryContextAllocExtended to avoid increased overhead */
+	void	   *ret;
+
+	AssertArg(MemoryContextIsValid(CurrentMemoryContext));
+	AssertNotInCriticalSection(CurrentMemoryContext);
+
+	if (((flags  MCXT_ALLOC_HUGE) != 0  !AllocHugeSizeIsValid(size)) ||
+		((flags  MCXT_ALLOC_HUGE) == 0  !AllocSizeIsValid(size)))
+		elog(ERROR, invalid memory alloc request size %zu, size);
+
+	CurrentMemoryContext-isReset = false;
+
+	ret = 

Re: [HACKERS] Supporting TAP tests with MSVC and Windows

2015-04-03 Thread Michael Paquier
Thanks for your input, Noah.

On Fri, Apr 3, 2015 at 3:22 PM, Noah Misch n...@leadboat.com wrote:
 Each Windows patch should cover all Windows build systems; patches that fix a
 problem in the src/tools/msvc build while leaving it broken in the GNU make
 build are a bad trend.  In this case, I expect you'll need few additional
 changes to cover both.

Yes I am planning to do more tests with MinGW as well, once I got the
patch in a more advanced state in May/June. For Cygwin, I am not much
familiar with it yet, but I am sure I'll come up with something.

 On Thu, Apr 02, 2015 at 06:30:02PM +0900, Michael Paquier wrote:
 2) tapcheck does not check if IPC::Run is installed or not. Should we
 add a check in the code for that? If yes, should we bypass the test or
 fail?

 The src/tools/msvc build system officially requires ActivePerl, and I seem to
 recall ActivePerl installs IPC::Run by default.  A check is optional.

I recall installing ActivePerl for my own box some time ago. It is
5.16, so now it is outdated, but the package manager does not contain
IPC::Run and I had to install it by hand.

 Test suites that run as part of make check-world, including all src/bin TAP
 suites, _must not_ enable trust authentication on Windows.  To do so would
 reintroduce CVE-2014-0067.  (The standard alternative is to call pg_regress
 --config-auth, which switches a data directory to SSPI authentication.)
 Suites not in check-world, though not obligated to follow that rule, will have
 a brighter future if they do so anyway.

OK. I'll rework this part.

 --- a/src/test/perl/TestLib.pm
 +++ b/src/test/perl/TestLib.pm

 @@ -73,9 +74,19 @@ sub tempdir_short
  sub standard_initdb
  {
   my $pgdata = shift;
 - system_or_bail(initdb -D '$pgdata' -A trust -N /dev/null);
 - system_or_bail($ENV{top_builddir}/src/test/regress/pg_regress,
 -'--config-auth', $pgdata);
 +
 + if ($Config{osname} eq MSWin32)
 + {
 + system_or_bail(initdb -D $pgdata -A trust -N  NUL);
 + system_or_bail($ENV{TESTREGRESS},
 +'--config-auth', $pgdata);
 + }
 + else
 + {
 + system_or_bail(initdb -D '$pgdata' -A trust -N /dev/null);
 + 
 system_or_bail($ENV{top_builddir}/src/test/regress/pg_regress,
 +'--config-auth', $pgdata);
 + }
  }

 Make all build systems set TESTREGRESS, and use it unconditionally.

Yeah, that would be better.

 That's not a complete review, just some highlights.

Thanks again.
-- 
Michael


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Possibly a typo in expand_inherited_rtentry()

2015-04-03 Thread Amit Langote
On 03-04-2015 PM 03:58, Amit Langote wrote:
  Index   childRTindex;
  AppendRelInfo *appinfo;
 
 -/* Open rel if needed; we already have required locks */
 +/* Open rel if needed; we already have acquired locks */
  if (childOID != parentOID)
  newrelation = heap_open(childOID, NoLock);

Though, it may be that required is to imply acquired.

Thanks,
Amit



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Auditing extension for PostgreSQL (Take 2)

2015-04-03 Thread Sawada Masahiko
On Thu, Apr 2, 2015 at 2:46 AM, David Steele da...@pgmasters.net wrote:
 Hi Sawada,

 On 3/25/15 9:24 AM, David Steele wrote:
 On 3/25/15 7:46 AM, Sawada Masahiko wrote:
 2.
 I got ERROR when executing function uses cursor.

 1) create empty table (hoge table)
 2) create test function as follows.

 create function test() returns int as $$
 declare
 cur1 cursor for select * from hoge;
 tmp int;
 begin
 open cur1;
 fetch cur1 into tmp;
return tmp;
 end$$
 language plpgsql ;

 3) execute test function (got ERROR)
 =# select test();
 LOG:  AUDIT: SESSION,6,1,READ,SELECT,,,selecT test();
 LOG:  AUDIT: SESSION,6,2,FUNCTION,EXECUTE,FUNCTION,public.test,selecT 
 test();
 LOG:  AUDIT: SESSION,6,3,READ,SELECT,,,select * from hoge
 CONTEXT:  PL/pgSQL function test() line 6 at OPEN
 ERROR:  pg_audit stack is already empty
 STATEMENT:  selecT test();

 It seems like that the item in stack is already freed by deleting
 pg_audit memory context (in MemoryContextDelete()),
 before calling stack_pop in dropping of top-level Portal.

 This has been fixed and I have attached a new patch.  I've seen this
 with cursors before where the parent MemoryContext is freed before
 control is returned to ProcessUtility.  I think that's strange behavior
 but there's not a lot I can do about it.


Thank you for updating the patch!

 The code I put in to deal with this situation was not quite robust
 enough so I had to harden it a bit more.

 Let me know if you see any other issues.


I pulled HEAD, and then tried to compile source code after applied
following deparsing utility command patch without #0001 and #0002.
(because these two patches are already pushed)
http://www.postgresql.org/message-id/20150325175954.gl3...@alvh.no-ip.org

But I could not use new pg_audit patch due to compile error (that
deparsing utility command patch might have).
I think I'm missing something, but I'm not sure.
Could you tell me which patch should I apply before compiling pg_audit?

Regards,

---
Sawada Masahiko


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Tables cannot have INSTEAD OF triggers

2015-04-03 Thread Dean Rasheed
On 2 April 2015 at 22:23, Robert Haas robertmh...@gmail.com wrote:
 On Thu, Apr 2, 2015 at 5:02 PM, Andres Freund and...@anarazel.de wrote:
 I think the upshot is that INSTEAD OF triggers work in a particular way
 because that's what is needed to support updatable views.  If triggers
 on tables should behave differently, maybe it should be a separate
 trigger type.  Maybe it would be feasible to extend BEFORE triggers to
 support RETURNING, for example?

 What in the above prohibits extending the behaviour to tables? I have
 yet to see what compatibility or similarity problem that'd pose. It
 seems all mightily handwavy to me.

 Yeah.  It's possible there's a better interface here than INSTEAD OF,
 and one of the things I didn't like about the OP was that it started
 by stating the syntax that would be used rather than by describing the
 problem that needed to be solved.  It's generally better to start with
 the latter, and then work out the syntax from there.  But having
 gotten that gripe out of my system, and especially in view of Dean's
 comments, it's not very clear to me what's wrong with using INSTEAD OF
 for this purpose.  If you make BEFORE triggers do this via RETURNING,
 then you might have a trigger that returns multiple rows, which seems
 like it would introduce a bunch of new complexity for no obvious
 benefit.


Yes, I'm inclined to agree. One of the reasons that INSTEAD OF
triggers weren't supported on tables was the lack of an obvious
use-case for it, but now having thought about partitioning, I think
they would provide a fairly neat solution to that problem. I don't
think that putting a view with INSTEAD OF triggers on top of the
parent table and then always going through that view works quite as
well, because there are still a few cases where a view doesn't work as
well as a table. A view can't be the target of a foreign key, for
example, so there'd be no way for a cascaded UPDATE to invoke the
INSTEAD OF triggers.

If you needed to handle the case of updates causing a change of
partition, adding conditional INSTEAD OF triggers to the child tables
would be a way to do that, retaining support for RETURNING, and
keeping the logic localised to each partition, only invoking it when
necessary.

Supporting INSTEAD OF triggers on tables is not completely trivial to
implement, but it doesn't look too hard either, and the more I think
about it, the more I suspect that other use-cases will emerge to make
that effort worthwhile.

Regards,
Dean


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


[HACKERS] Possibly a typo in expand_inherited_rtentry()

2015-04-03 Thread Amit Langote
Hi,

Attached does:

 Index   childRTindex;
 AppendRelInfo *appinfo;

-/* Open rel if needed; we already have required locks */
+/* Open rel if needed; we already have acquired locks */
 if (childOID != parentOID)
 newrelation = heap_open(childOID, NoLock);
 else

Does that make sense?

Thanks,
Amit
diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c
index 51b3da2..b0cb818 100644
--- a/src/backend/optimizer/prep/prepunion.c
+++ b/src/backend/optimizer/prep/prepunion.c
@@ -1317,7 +1317,7 @@ expand_inherited_rtentry(PlannerInfo *root, RangeTblEntry *rte, Index rti)
 		Index		childRTindex;
 		AppendRelInfo *appinfo;
 
-		/* Open rel if needed; we already have required locks */
+		/* Open rel if needed; we already have acquired locks */
 		if (childOID != parentOID)
 			newrelation = heap_open(childOID, NoLock);
 		else

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] EvalPlanQual behaves oddly for FDW queries involving system columns

2015-04-03 Thread Etsuro Fujita
On 2015/03/25 4:56, Tom Lane wrote:
 Etsuro Fujita fujita.ets...@lab.ntt.co.jp writes:
 Let me explain further.  Here is the comment in ExecOpenScanRelation:
 
* Determine the lock type we need.  First, scan to see if target
 relation
* is a result relation.  If not, check if it's a FOR UPDATE/FOR SHARE
* relation.  In either of those cases, we got the lock already.
 
 I think this is not true for foreign tables selected FOR UPDATE/SHARE,
 which have markType = ROW_MARK_COPY, because such foreign tables don't
 get opened/locked by InitPlan.  Then such foreign tables don't get
 locked by neither of InitPlan nor ExecOpenScanRelation.  I think this is
 a bug.
 
 You are right.  I think it may not matter in practice, but if the executor
 is taking its own locks here then it should not overlook ROW_MARK_COPY
 cases.
 
 To fix it, I think we should open/lock such foreign tables at
 InitPlan as the original patch does.
 
 I still don't like that; InitPlan is not doing something that would
 require physical table access.  The right thing is to fix
 ExecOpenScanRelation's idea of whether InitPlan took a lock or not,
 which I've now done.

OK, thanks.

Best regards,
Etsuro Fujita


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] The return value of allocate_recordbuf()

2015-04-03 Thread Fujii Masao
On Fri, Apr 3, 2015 at 2:30 PM, Michael Paquier
michael.paqu...@gmail.com wrote:
 On Fri, Apr 3, 2015 at 12:56 PM, Fujii Masao wrote:
 The first patch looks good to me basically. But I have one comment:
 shouldn't we expose pg_malloc_extended as a global function like
 we did pg_malloc? Some frontends might need to use it in the future.

 Yes, it makes sense as the other functions do it too. So I refactored
 the patch and defined a new static inline routine,
 pg_malloc_internal(), that all the other functions call to reduce the
 temperature in this code path that I suppose can become quite hot even
 for frontends. In the second patch I added as well what was needed for
 pg_rewind.

Thanks for updating the patches!
I pushed the first and a part of the second patch.

Regarding the second patch, you added the checks of the return value of
XLogReaderAllocate(). But it seems half-baked. XLogReaderAllocate() still
uses palloc(), but don't we need to replace it with palloc_extended(), too?

Regards,

-- 
Fujii Masao


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Supporting TAP tests with MSVC and Windows

2015-04-03 Thread Noah Misch
Each Windows patch should cover all Windows build systems; patches that fix a
problem in the src/tools/msvc build while leaving it broken in the GNU make
build are a bad trend.  In this case, I expect you'll need few additional
changes to cover both.

On Thu, Apr 02, 2015 at 06:30:02PM +0900, Michael Paquier wrote:
 2) tapcheck does not check if IPC::Run is installed or not. Should we
 add a check in the code for that? If yes, should we bypass the test or
 fail?

The src/tools/msvc build system officially requires ActivePerl, and I seem to
recall ActivePerl installs IPC::Run by default.  A check is optional.

 7) TAP tests use sometimes top_builddir directly. I think that's ugly,
 and if there are no objections I think that we should change it to use
 a dedicated environment variable like TESTTOP or similar.

I sense nothing ugly about a top_builddir reference, but see below.

 --- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl
 +++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl

  open HBA, $tempdir/pgdata/pg_hba.conf;
 -print HBA local replication all trust\n;
 +# Windows builds do not support local connections
 +if ($Config{osname} ne MSWin32)
 +{
 + print HBA local replication all trust\n;
 +}
  print HBA host replication all 127.0.0.1/32 trust\n;
  print HBA host replication all ::1/128 trust\n;
  close HBA;

Test suites that run as part of make check-world, including all src/bin TAP
suites, _must not_ enable trust authentication on Windows.  To do so would
reintroduce CVE-2014-0067.  (The standard alternative is to call pg_regress
--config-auth, which switches a data directory to SSPI authentication.)
Suites not in check-world, though not obligated to follow that rule, will have
a brighter future if they do so anyway.

 --- a/src/test/perl/TestLib.pm
 +++ b/src/test/perl/TestLib.pm

 @@ -73,9 +74,19 @@ sub tempdir_short
  sub standard_initdb
  {
   my $pgdata = shift;
 - system_or_bail(initdb -D '$pgdata' -A trust -N /dev/null);
 - system_or_bail($ENV{top_builddir}/src/test/regress/pg_regress,
 -'--config-auth', $pgdata);
 +
 + if ($Config{osname} eq MSWin32)
 + {
 + system_or_bail(initdb -D $pgdata -A trust -N  NUL);
 + system_or_bail($ENV{TESTREGRESS},
 +'--config-auth', $pgdata);
 + }
 + else
 + {
 + system_or_bail(initdb -D '$pgdata' -A trust -N /dev/null);
 + system_or_bail($ENV{top_builddir}/src/test/regress/pg_regress,
 +'--config-auth', $pgdata);
 + }
  }

Make all build systems set TESTREGRESS, and use it unconditionally.


That's not a complete review, just some highlights.

Thanks,
nm


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] The return value of allocate_recordbuf()

2015-04-03 Thread Michael Paquier
On Fri, Apr 3, 2015 at 6:35 PM, Fujii Masao wrote:
 Regarding the second patch, you added the checks of the return value of
 XLogReaderAllocate(). But it seems half-baked. XLogReaderAllocate() still
 uses palloc(), but don't we need to replace it with palloc_extended(), too?

Doh, you are right. I missed three places. Attached is a new patch
completing the fix.
-- 
Michael
From 292012c19805777cf17443eccd9b4ef05c5f42ec Mon Sep 17 00:00:00 2001
From: Michael Paquier mich...@otacoo.com
Date: Fri, 3 Apr 2015 20:29:39 +0900
Subject: [PATCH] Fix error handling of XLogReaderAllocate in case of OOM

Similarly to previous fix 9b8d478, commit 2c03216 has switched
XLogReaderAllocate() to use a set of palloc calls instead of malloc,
causing any callers of this function to fail with an error instead of
receiving a NULL pointer in case of out-of-memory error. Fix this by
using palloc_extended with MCXT_ALLOC_NO_OOM that will safely return
NULL in case of an OOM, making this routine compatible with previous
major versions.
---
 src/backend/access/transam/xlogreader.c   | 23 ---
 src/backend/replication/logical/logical.c |  5 +
 src/bin/pg_rewind/parsexlog.c |  6 ++
 3 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c
index ffdc975..9047805 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -66,7 +66,11 @@ XLogReaderAllocate(XLogPageReadCB pagereadfunc, void *private_data)
 {
 	XLogReaderState *state;
 
-	state = (XLogReaderState *) palloc0(sizeof(XLogReaderState));
+	state = (XLogReaderState *)
+		palloc_extended(sizeof(XLogReaderState),
+		MCXT_ALLOC_NO_OOM | MCXT_ALLOC_ZERO);
+	if (!state)
+		return NULL;
 
 	state-max_block_id = -1;
 
@@ -77,14 +81,27 @@ XLogReaderAllocate(XLogPageReadCB pagereadfunc, void *private_data)
 	 * isn't guaranteed to have any particular alignment, whereas palloc()
 	 * will provide MAXALIGN'd storage.
 	 */
-	state-readBuf = (char *) palloc(XLOG_BLCKSZ);
+	state-readBuf = (char *) palloc_extended(XLOG_BLCKSZ,
+			  MCXT_ALLOC_NO_OOM);
+	if (!state-readBuf)
+	{
+		pfree(state);
+		return NULL;
+	}
 
 	state-read_page = pagereadfunc;
 	/* system_identifier initialized to zeroes above */
 	state-private_data = private_data;
 	/* ReadRecPtr and EndRecPtr initialized to zeroes above */
 	/* readSegNo, readOff, readLen, readPageTLI initialized to zeroes above */
-	state-errormsg_buf = palloc(MAX_ERRORMSG_LEN + 1);
+	state-errormsg_buf = palloc_extended(MAX_ERRORMSG_LEN + 1,
+		  MCXT_ALLOC_NO_OOM);
+	if (!state-errormsg_buf)
+	{
+		pfree(state-readBuf);
+		pfree(state);
+		return NULL;
+	}
 	state-errormsg_buf[0] = '\0';
 
 	/*
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c
index 30baa45..774ebbc 100644
--- a/src/backend/replication/logical/logical.c
+++ b/src/backend/replication/logical/logical.c
@@ -163,6 +163,11 @@ StartupDecodingContext(List *output_plugin_options,
 	ctx-slot = slot;
 
 	ctx-reader = XLogReaderAllocate(read_page, ctx);
+	if (!ctx-reader)
+		ereport(ERROR,
+(errcode(ERRCODE_OUT_OF_MEMORY),
+ errmsg(out of memory)));
+
 	ctx-reader-private_data = ctx;
 
 	ctx-reorder = ReorderBufferAllocate();
diff --git a/src/bin/pg_rewind/parsexlog.c b/src/bin/pg_rewind/parsexlog.c
index 0787ca1..3cf96ab 100644
--- a/src/bin/pg_rewind/parsexlog.c
+++ b/src/bin/pg_rewind/parsexlog.c
@@ -70,6 +70,8 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, TimeLineID tli,
 	private.datadir = datadir;
 	private.tli = tli;
 	xlogreader = XLogReaderAllocate(SimpleXLogPageRead, private);
+	if (xlogreader == NULL)
+		pg_fatal(out of memory);
 
 	do
 	{
@@ -121,6 +123,8 @@ readOneRecord(const char *datadir, XLogRecPtr ptr, TimeLineID tli)
 	private.datadir = datadir;
 	private.tli = tli;
 	xlogreader = XLogReaderAllocate(SimpleXLogPageRead, private);
+	if (xlogreader == NULL)
+		pg_fatal(out of memory);
 
 	record = XLogReadRecord(xlogreader, ptr, errormsg);
 	if (record == NULL)
@@ -171,6 +175,8 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, TimeLineID tli,
 	private.datadir = datadir;
 	private.tli = tli;
 	xlogreader = XLogReaderAllocate(SimpleXLogPageRead, private);
+	if (xlogreader == NULL)
+		pg_fatal(out of memory);
 
 	searchptr = forkptr;
 	for (;;)
-- 
2.3.5


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] EvalPlanQual behaves oddly for FDW queries involving system columns

2015-04-03 Thread Etsuro Fujita

On 2015/03/13 0:50, Tom Lane wrote:

I think the real fix as far as postgres_fdw is concerned is in fact
to let it adopt a different ROW_MARK strategy, since it has meaningful
ctid values.  However, that is not a one-size-fits-all answer.



The tableoid problem can be fixed much less invasively as per the attached
patch.  I think that we should continue to assume that ctid is not
meaningful (and hence should read as (4294967295,0)) in FDWs that use
ROW_MARK_COPY, and press forward on fixing the locking issues for
postgres_fdw by letting it use ROW_MARK_REFERENCE or something close to
that.  That would also cause ctid to read properly for rows from
postgres_fdw.


To support ROW_MARK_REFERENCE on (postgres_fdw) foreign tables, I'd like 
to propose the following FDW APIs:


RowMarkType
GetForeignRowMarkType(Oid relid,
  LockClauseStrength strength);

Decide which rowmark type to use for a foreign table (that has strength 
= LCS_NONE), ie, ROW_MARK_REFERENCE or ROW_MARK_COPY.  (For now, the 
second argument takes LCS_NONE only, but is intended to be used for the 
possible extension to the other cases.)  This is called during 
select_rowmark_type() in the planner.


void
BeginForeignFetch(EState *estate,
  ExecRowMark *erm,
  List *fdw_private,
  int eflags);

Begin a remote fetch. This is called during InitPlan() in the executor.

HeapTuple
ExecForeignFetch(EState *estate,
 ExecRowMark *erm,
 ItemPointer tupleid);

Re-fetch the specified tuple.  This is called during 
EvalPlanQualFetchRowMarks() in the executor.


void
EndForeignFetch(EState *estate,
ExecRowMark *erm);

End a remote fetch.  This is called during ExecEndPlan() in the executor.

And I'd also like to propose to add a table/server option, 
row_mark_reference, to postgres_fdw.  When a user sets the option to 
true for eg a foreign table, ROW_MARK_REFERENCE will be used for the 
table, not ROW_MARK_COPY.


Attached is a WIP patch, which contains no docs/regression tests.

It'd be appreciated if anyone could send back any comments earlier.

Best regards,
Etsuro Fujita
*** a/contrib/postgres_fdw/option.c
--- b/contrib/postgres_fdw/option.c
***
*** 105,111  postgres_fdw_validator(PG_FUNCTION_ARGS)
  		 * Validate option value, when we can do so without any context.
  		 */
  		if (strcmp(def-defname, use_remote_estimate) == 0 ||
! 			strcmp(def-defname, updatable) == 0)
  		{
  			/* these accept only boolean values */
  			(void) defGetBoolean(def);
--- 105,112 
  		 * Validate option value, when we can do so without any context.
  		 */
  		if (strcmp(def-defname, use_remote_estimate) == 0 ||
! 			strcmp(def-defname, updatable) == 0 ||
! 			strcmp(def-defname, row_mark_reference) == 0)
  		{
  			/* these accept only boolean values */
  			(void) defGetBoolean(def);
***
*** 153,158  InitPgFdwOptions(void)
--- 154,162 
  		/* updatable is available on both server and table */
  		{updatable, ForeignServerRelationId, false},
  		{updatable, ForeignTableRelationId, false},
+ 		/* row_mark_reference is available on both server and table */
+ 		{row_mark_reference, ForeignServerRelationId, false},
+ 		{row_mark_reference, ForeignTableRelationId, false},
  		{NULL, InvalidOid, false}
  	};
  
*** a/contrib/postgres_fdw/postgres_fdw.c
--- b/contrib/postgres_fdw/postgres_fdw.c
***
*** 124,129  enum FdwModifyPrivateIndex
--- 124,144 
  };
  
  /*
+  * Similarly, this enum describes what's kept in the fdw_private list for
+  * a PlanRowMark node referencing a postgres_fdw foreign table.  We store:
+  *
+  * 1) SELECT statement text to be sent to the remote server
+  * 2) Integer list of attribute numbers retrieved by SELECT
+  */
+ enum FdwFetchPrivateIndex
+ {
+ 	/* SQL statement to execute remotely (as a String node) */
+ 	FdwFetchPrivateSelectSql,
+ 	/* Integer list of attribute numbers retrieved by SELECT */
+ 	FdwFetchPrivateRetrievedAttrs
+ };
+ 
+ /*
   * Execution state of a foreign scan using postgres_fdw.
   */
  typedef struct PgFdwScanState
***
*** 186,191  typedef struct PgFdwModifyState
--- 201,230 
  } PgFdwModifyState;
  
  /*
+  * Execution state of a foreign fetch operation.
+  */
+ typedef struct PgFdwFetchState
+ {
+ 	Relation	rel;			/* relcache entry for the foreign table */
+ 	AttInMetadata *attinmeta;	/* attribute datatype conversion metadata */
+ 
+ 	/* for remote query execution */
+ 	PGconn	   *conn;			/* connection for the fetch */
+ 	char	   *p_name;			/* name of prepared statement, if created */
+ 
+ 	/* extracted fdw_private data */
+ 	char	   *query;			/* text of SELECT command */
+ 	List	   *retrieved_attrs;	/* attr numbers retrieved by SELECT */
+ 
+ 	/* info about parameters for prepared statement */
+ 	int			p_nums;			/* number of parameters to transmit */
+ 	FmgrInfo   *p_flinfo;		/* output conversion functions for them */
+ 
+ 	

Re: [HACKERS] Abbreviated keys for text cost model fix

2015-04-03 Thread Robert Haas
On Mon, Feb 23, 2015 at 7:44 PM, Peter Geoghegan p...@heroku.com wrote:
 On Mon, Feb 23, 2015 at 4:41 PM, Tomas Vondra
 tomas.von...@2ndquadrant.com wrote:
 Are you going to add this into the CF? Would be nice to get this into
 9.5. Strictly speaking it should go to 2015-06 I guess, but I'd consider
 it part of one of the existing sortsupport patches.

 It's a bugfix, IMV. I guess I should add it to the current CF, but I
 think I might be forbidden from doing so as a non-CF-manager...

Committed.  For future reference, I'd prefer to have things like this
added to the next CF rather than no CF at all.

I'm not sure if you've got all the details right here, but the concept
makes sense to me: if we're going to give up, we should do it early.
Doing it later throws away more work and is therefore riskier.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] The return value of allocate_recordbuf()

2015-04-03 Thread Fujii Masao
On Fri, Apr 3, 2015 at 8:37 PM, Michael Paquier
michael.paqu...@gmail.com wrote:
 On Fri, Apr 3, 2015 at 6:35 PM, Fujii Masao wrote:
 Regarding the second patch, you added the checks of the return value of
 XLogReaderAllocate(). But it seems half-baked. XLogReaderAllocate() still
 uses palloc(), but don't we need to replace it with palloc_extended(), too?

 Doh, you are right. I missed three places. Attached is a new patch
 completing the fix.

Thanks for the patch! I updated two source code comments and
changed the log message when XLogReaderAllocate returns NULL
within XLOG_DEBUG block. Just pushed.

Regards,

-- 
Fujii Masao


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] libpq's multi-threaded SSL callback handling is busted

2015-04-03 Thread Jan Urbański

Peter Eisentraut writes:
 On 4/2/15 4:32 AM, Jan Urbański wrote:
 
 Peter Eisentraut writes:
 I don't think this patch would actually fix the problem that was
 described after the original bug report
 (http://www.postgresql.org/message-id/5436991b.5020...@vmware.com),
 namely that another thread acquires a lock while the libpq callbacks are
 set and then cannot release the lock if libpq has been shut down in the
 meantime.
 
 I did test both the Python and the PHP repro scripts and the patch fixed both
 the deadlock and the segfault.
 
 What happens is that Python (for instance) stops over the callback
 unconditionally. So when libpq gets unloaded, it sees that the currently set
 callback is no the one it originally set and refrains from NULLing it.

 So this works because Python is just as broken as libpq right now.  What
 happens if Python is fixed as well?  Then we'll have the problem I
 described above.

Well, not really, libpq sets and unsets the callbacks every time an SSL
connection is opened and closed. Python sets the callbacks once when the ssl
module is imported and never touches them again.

Arguably, it should set them even earlier, but it's still saner than
flip-flopping them. AFAIK you can't unload Python, so setting the callback
and keeping it there is a sound strategy.

The change I'm proposing is not to set the callback in libpq if one is already
set and not remove it if the one that's set is not libpq's. That's as sane as
it gets.

With multiple libraries wanting to use OpenSSL in threaded code, the mechanism
seems to be last one wins. It doesn't matter *who's* callbacks are used, as
long as they're there and they stay there and that's Python's stance. This
doesn't work if you want to be able to unload the library, so the next best
thing is not touching the callback if someone else set his in the meantime.

What's broken is OpenSSL for offering such a bad way of dealing with
concurrency.

To reiterate: I recognise that not handling the callbacks is not the right
answer. But not stomping on callbacks others might have set sounds like a
minimal and safe improvement.

Cheers,
Jan


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Re: Abbreviated keys for Datum tuplesort

2015-04-03 Thread Robert Haas
On Thu, Apr 2, 2015 at 7:02 PM, Peter Geoghegan p...@heroku.com wrote:
 On Thu, Apr 2, 2015 at 11:21 PM, Robert Haas robertmh...@gmail.com wrote:
 The changes that Andrew
 took issue with are utterly insignificant.

 Great.  Then you will be utterly indifferent to which version gets committed.

 *shrug*

 You were the one that taught me to be bureaucratically minded about
 keeping code consistent at this fine a level. I think it's odd that
 you of all people are opposing me on this point, but whatever.

Sure, consistency is important.  But sometimes there is more than one
thing that you can choose to be consistent with.  IIUC, you're
complaining because somebody assigned the return value of a function
to a variable whose type matches the function's return type, rather
than assigning it to a variable of the same mismatching type used in
parallel code elsewhere.  Which form of consistency to aim for in such
cases is fundamentally a judgement call.  I'll have another look over
the patch and maybe I'll come around to your point of view, but you
don't seem very willing to concede the point that intelligent people
could disagree over what is most consistent here.  I'm about as much
of a stickler for the details as you will find on this mailing list,
or possibly, in the observable universe, but even I'm not willing to
expend the amount of ink and emotional energy you have on whether a
variable that holds +1, 0, or -1 ought to be declared as int or
int32.  Does it matter?  Yeah.  Is it worth this much argument?  No.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Re: Abbreviated keys for Datum tuplesort

2015-04-03 Thread Peter Geoghegan
On Fri, Apr 3, 2015 at 1:17 PM, Stephen Frost sfr...@snowman.net wrote:
 but even I'm not willing to
 expend the amount of ink and emotional energy you have on whether a
 variable that holds +1, 0, or -1 ought to be declared as int or
 int32.  Does it matter?  Yeah.  Is it worth this much argument?  No.

 My only comment will be on this very minor aspect (and I'm quite
 agnostic as to what is decided, particularly as I haven't read the patch
 at all), but, should we consider an enum (generically) for such cases?
 If that's truly the extent of possible values, and anything else is an
 error, then at least if I was writing DDL to support this, I'd use an
 enum, maybe a domain, or a CHECK constraint (though I'd likely feel
 better about the enum or domain approach).

It isn't the case that an enum can support it. Some comparators will
return -5 rather than -1 (as with C-style comparators in general,
sometimes comparisons can be implemented using subtraction and things
like that).

-- 
Peter Geoghegan


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Auditing extension for PostgreSQL (Take 2)

2015-04-03 Thread David Steele
On 4/3/15 3:59 AM, Sawada Masahiko wrote:
 On Thu, Apr 2, 2015 at 2:46 AM, David Steele da...@pgmasters.net wrote:
 Let me know if you see any other issues.

 
 I pulled HEAD, and then tried to compile source code after applied
 following deparsing utility command patch without #0001 and #0002.
 (because these two patches are already pushed)
 http://www.postgresql.org/message-id/20150325175954.gl3...@alvh.no-ip.org
 
 But I could not use new pg_audit patch due to compile error (that
 deparsing utility command patch might have).
 I think I'm missing something, but I'm not sure.
 Could you tell me which patch should I apply before compiling pg_audit?

When Alvaro posted his last patch set he recommended applying them to
b3196e65:

http://www.postgresql.org/message-id/20150325175954.gl3...@alvh.no-ip.org

Applying the 3/25 deparse patches onto b3196e65 (you'll see one trailing
space error) then applying pg_audit-v6.patch works fine.

-- 
- David Steele
da...@pgmasters.net



signature.asc
Description: OpenPGP digital signature


Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Robert Haas
On Thu, Apr 2, 2015 at 10:41 PM, Andrew Gierth
and...@tao11.riddles.org.uk wrote:
  Robert - Changed some definitions to depend on SIZEOF_DATUM rather
  Robert than USE_FLOAT8_BYVAL.  Hopefully I didn't muff this; please
  Robert check it.

 No, that's wrong; it must use USE_FLOAT8_BYVAL since that's what the
 definitions of Int64GetDatum / DatumGetInt64 are conditional on. As you
 have it now, it'll break if you build with --disable-float8-byval on a
 64bit platform.

I'd prefer to avoid that by avoiding the use of those macros in this
code path rather than by leaving the top 32 bits of the Datum unused
in that configuration.  I tried to get there by using a cast for
DatumGetNumericAbbrev(), but I forgot to update the NAN case, so at
least this much is probably needed:

--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -299,10 +299,10 @@ typedef struct
 #define NUMERIC_ABBREV_BITS (SIZEOF_DATUM * BITS_PER_BYTE)
 #if SIZEOF_DATUM == 8
 #define DatumGetNumericAbbrev(d) ((int64) d)
-#define NUMERIC_ABBREV_NAN Int64GetDatum(PG_INT64_MIN)
+#define NUMERIC_ABBREV_NAN ((Datum) PG_INT64_MIN)
 #else
 #define DatumGetNumericAbbrev(d) ((int32) d)
-#define NUMERIC_ABBREV_NAN Int32GetDatum(PG_INT32_MIN)
+#define NUMERIC_ABBREV_NAN ((Datum) PG_INT32_MIN)
 #endif

What other risks do you see?

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Re: Abbreviated keys for Datum tuplesort

2015-04-03 Thread Peter Geoghegan
On Fri, Apr 3, 2015 at 1:07 PM, Robert Haas robertmh...@gmail.com wrote:
 I'm about as much
 of a stickler for the details as you will find on this mailing list,
 or possibly, in the observable universe, but even I'm not willing to
 expend the amount of ink and emotional energy you have on whether a
 variable that holds +1, 0, or -1 ought to be declared as int or
 int32.  Does it matter?  Yeah.  Is it worth this much argument?  No.


I haven't really spent very much time arguing about this point at all,
and intend to spend no more time on it. It's up to you.

-- 
Peter Geoghegan


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Re: Abbreviated keys for Datum tuplesort

2015-04-03 Thread Stephen Frost
* Robert Haas (robertmh...@gmail.com) wrote:
 I'm about as much
 of a stickler for the details as you will find on this mailing list,
 or possibly, in the observable universe,

This made me laugh. :)

 but even I'm not willing to
 expend the amount of ink and emotional energy you have on whether a
 variable that holds +1, 0, or -1 ought to be declared as int or
 int32.  Does it matter?  Yeah.  Is it worth this much argument?  No.

My only comment will be on this very minor aspect (and I'm quite
agnostic as to what is decided, particularly as I haven't read the patch
at all), but, should we consider an enum (generically) for such cases?
If that's truly the extent of possible values, and anything else is an
error, then at least if I was writing DDL to support this, I'd use an
enum, maybe a domain, or a CHECK constraint (though I'd likely feel
better about the enum or domain approach).

Thanks!

Stephen


signature.asc
Description: Digital signature


Re: [HACKERS] Cube extension kNN support

2015-04-03 Thread Alexander Korotkov
On Thu, Mar 12, 2015 at 8:43 PM, Stas Kelvich stas.kelv...@gmail.com
wrote:

 Documentation along with style fix.


Since we change the interface of extension we have to change it version and
create a migration script.
E.g. you have to rename cube--1.0.sql to cube--1.1.sql and create
cube--1.0--1.1.sql to migrate the old version.

+ -- Alias for backword compatibility
  CREATE FUNCTION cube_distance(cube, cube)
  RETURNS float8
+ AS 'MODULE_PATHNAME', 'distance_euclid'
+ LANGUAGE C IMMUTABLE STRICT;

For backward compatibility it would be better to keep the old name of
cube_distance so that extension with old definition could work with new
binary.

--
With best regards,
Alexander Korotkov.


Re: [HACKERS] Abbreviated keys for text cost model fix

2015-04-03 Thread Peter Geoghegan
On Fri, Apr 3, 2015 at 1:49 PM, Robert Haas robertmh...@gmail.com wrote:
 Committed.  For future reference, I'd prefer to have things like this
 added to the next CF rather than no CF at all.

I'll bear that in mind. Thanks.


-- 
Peter Geoghegan


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Andrew Gierth
 Robert == Robert Haas robertmh...@gmail.com writes:

  No, that's wrong; it must use USE_FLOAT8_BYVAL since that's what the
  definitions of Int64GetDatum / DatumGetInt64 are conditional on. As
  you have it now, it'll break if you build with
  --disable-float8-byval on a 64bit platform.

 Robert I'd prefer to avoid that by avoiding the use of those macros in
 Robert this code path rather than by leaving the top 32 bits of the
 Robert Datum unused

I don't consider it appropriate to override ./configure in this way.

-- 
Andrew (irc:RhodiumToad)


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Table-level log_autovacuum_min_duration

2015-04-03 Thread Alvaro Herrera
Michael Paquier wrote:
 On Fri, Apr 3, 2015 at 3:26 PM, Michael Paquier wrote:
  [...]
  Fine for me.
 
 And here are the correct patches. Sorry for that.

Thanks, pushed.  I added one extra comment to the SIGHUP patch in the
place where you previously had the exit.

-- 
Álvaro Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training  Services


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] initdb -S and tablespaces

2015-04-03 Thread Alvaro Herrera
Abhijit Menon-Sen wrote:
 At 2015-01-15 14:32:45 +0100, and...@2ndquadrant.com wrote:

 Patch attached.
 
 Changes:
 
 1. Renamed perform_fsync to fsync_recursively (otherwise it would read
fsync_pgdata(pg_data))

Okay, but as far as I can tell this function is very specific to
PGDATA; you couldn't use it in any other directory (or pg_tblspc would
be missing and that would cause an error, right?)  Therefore I think it
would make sense to have the name reflect this; maybe
fsync_datadir_recursively(data_directory)
or
fsync_pgdata_recursively(data_directory)
would work?  But then, since the name is already telling us that it's
all about PGDATA, maybe we can remove the recursively part of the
name?  Not sure about any of this; other opinions?

I also noticed that walkdir() thinks it is completely agnostic on what
the passed action is; except that the comment at the bottom talks about
how fsync on directories is important, which seems out of place.

I wonder about walktblspc_links() too.  Seems to me that that function
is pretty much the same as walkdir(); would it work to add a flag to the
latter to change the behavior in whatever way needs to be changed, and
remove the former?  Hmm ... Actually, since surely we must follow
symlinks everywhere, why do we have to do this separately for pg_tblspc?
Shouldn't that link-following occur automatically when walking PGDATA in
the first place?


 2. Added ControlData-fsync_disabled to record whether fsync was ever
disabled while the server was running (tested in CreateCheckPoint)
 3. Run fsync_recursively at startup only if fsync is enabled
 4. Run it if we're doing crash recovery, or fsync was disabled
 5. Use pg_flush_data in pre_sync_fname
 6. Issue fsync on directories too
 7. Tested that it works if pg_xlog is a symlink (no changes).
 
 (In short, everything you mentioned in your earlier mail.)
 
 Note that I set ControlData-fsync_disabled to false in BootstrapXLOG,
 but it gets set to true during a later CreateCheckPoint(). This means
 we run fsync again at startup after initdb. I'm not sure what to do
 about that.

This all looks reasonable to me.  I just noticed, though, that
the fd.c routines test enableFsync and do nothing if it's not enabled;
but fsync_recursively goes to all the trouble of doing stuff even if
disabled, and the actions are skipped later; the enableFsync check is
then responsibility of the caller.  This seems a bit prone to later
confusion.  Maybe fsync_recursively should Assert() that it's only being
called with enableFsync=on; or perhaps we can have it return early if
it's unset.

-- 
Álvaro Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training  Services


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Andrew Gierth
 Robert == Robert Haas robertmh...@gmail.com writes:

  I don't consider it appropriate to override ./configure in this way.

 Robert I don't see how that's overriding configure.  Commit
 Robert 8472bf7a73487b0535c95e299773b882f7523463, which introduced
 Robert --disable-float8-byval in 2008, states that the motivation for
 Robert this is that it might break functions using the version 0
 Robert calling convention.  It should not propagate, like kudzu, into
 Robert things that having nothing to do with how values are passed to
 Robert V0 functions.

It already does; it changes how int64 values are expected to be stored
in Datum variables. _Everything_ that currently stores an int64 value in
a Datum is affected.

As I see it, you need a really good reason to override that in a
specific case, and supporting 64-bit abbreviations on a
--disable-float8-byval build really isn't a good reason (since 32-bit
abbrevs work fine and such builds should be vanishingly rare anyway).

The fact that making this one low-benefit change has introduced no less
than three separate bugs - the compile error with that #ifdef, the use
of Int64GetDatum for NANs, and the use of Int64GetDatum for the return
value of the abbreviation function should possibly be taken as a hint to
how bad an idea is.

If you're determined to go this route - over my protest - then you need
to do something like define a NumericAbbrevGetDatum(x) macro and use it
in place of the Int64GetDatum / Int32GetDatum ones for both NAN and the
return from numeric_abbrev_convert_var.

-- 
Andrew (irc:RhodiumToad)


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Robert Haas
On Fri, Apr 3, 2015 at 1:39 PM, Andrew Gierth
and...@tao11.riddles.org.uk wrote:
 It already does; it changes how int64 values are expected to be stored
 in Datum variables. _Everything_ that currently stores an int64 value in
 a Datum is affected.

But this isn't a value of the SQL type int64.  It's just a bit
pattern that has to fit inside however big a Datum happens to be.

 As I see it, you need a really good reason to override that in a
 specific case, and supporting 64-bit abbreviations on a
 --disable-float8-byval build really isn't a good reason (since 32-bit
 abbrevs work fine and such builds should be vanishingly rare anyway).

In my opinion, there is way too much crap around already just to cater
to --disable-float8-byval.  I think not adding more is a perfectly
reasonable goal.  If somebody wants to remove --disable-float8-byval
some day, I want to minimize the amount of stuff they have to change
in order to do that.  I think that keeping this off the list of stuff
that will require modification is a worthy goal.

 The fact that making this one low-benefit change has introduced no less
 than three separate bugs - the compile error with that #ifdef, the use
 of Int64GetDatum for NANs, and the use of Int64GetDatum for the return
 value of the abbreviation function should possibly be taken as a hint to
 how bad an idea is.

But all of those are trivial, and the first would have been caught by
my compiler if I weren't using such a crappy old compiler.  If
anything that might require as much as 10 lines of code churn to fix
is not worth doing, very little is worth doing.

 If you're determined to go this route - over my protest - then you need
 to do something like define a NumericAbbrevGetDatum(x) macro and use it
 in place of the Int64GetDatum / Int32GetDatum ones for both NAN and the
 return from numeric_abbrev_convert_var.

Patch for that attached.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index dd108c8..0b11985 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -298,11 +298,13 @@ typedef struct
 
 #define NUMERIC_ABBREV_BITS (SIZEOF_DATUM * BITS_PER_BYTE)
 #if SIZEOF_DATUM == 8
-#define DatumGetNumericAbbrev(d) ((int64) d)
-#define NUMERIC_ABBREV_NAN Int64GetDatum(PG_INT64_MIN)
+#define NumericAbbrevGetDatum(X) ((Datum) SET_8_BYTES(X))
+#define DatumGetNumericAbbrev(X) ((int64) GET_8_BYTES(X))
+#define NUMERIC_ABBREV_NAN		 NumericAbbrevGetDatum(PG_INT64_MIN)
 #else
-#define DatumGetNumericAbbrev(d) ((int32) d)
-#define NUMERIC_ABBREV_NAN Int32GetDatum(PG_INT32_MIN)
+#define NumericAbbrevGetDatum(X) ((Datum) SET_4_BYTES(X))
+#define DatumGetNumericAbbrev(X) ((int32) GET_4_BYTES(X))
+#define NUMERIC_ABBREV_NAN		 NumericAbbrevGetDatum(PG_INT32_MIN)
 #endif
 
 
@@ -1883,7 +1885,7 @@ numeric_abbrev_convert_var(NumericVar *var, NumericSortSupport *nss)
 		addHyperLogLog(nss-abbr_card, DatumGetUInt32(hash_uint32(tmp)));
 	}
 
-	return Int64GetDatum(result);
+	return NumericAbbrevGetDatum(result);
 }
 
 #endif   /* NUMERIC_ABBREV_BITS == 64 */
@@ -1960,7 +1962,7 @@ numeric_abbrev_convert_var(NumericVar *var, NumericSortSupport *nss)
 		addHyperLogLog(nss-abbr_card, DatumGetUInt32(hash_uint32(tmp)));
 	}
 
-	return Int32GetDatum(result);
+	return NumericAbbrevGetDatum(result);
 }
 
 #endif   /* NUMERIC_ABBREV_BITS == 32 */

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


[HACKERS] Compile warnings on OSX 10.10 clang 6.0

2015-04-03 Thread John Gorman
Hi All

I am getting compile warnings on OSX 10.10 from clang 6.0:

clang: warning: argument unused during compilation: '-pthread'

The 5 warnings are where we are making a -dynamiclib and
the -pthread argument is not necessary:

./src/interfaces/libpq/
./src/interfaces/ecpg/pgtypeslib/
./src/interfaces/ecpg/ecpglib/
./src/interfaces/ecpg/compatlib/
./src/interfaces/ecpg/preproc/

This is interfering with using -Wall -Werror to catch warnings.

Any opinions as to whether this is worth fixing and if so
what the cleanest approach might be?

Thanks, John


Re: [HACKERS] Compile warnings on OSX 10.10 clang 6.0

2015-04-03 Thread Tom Lane
Peter Eisentraut pete...@gmx.net writes:
 On 4/3/15 4:02 PM, John Gorman wrote:
 I am getting compile warnings on OSX 10.10 from clang 6.0:
 
 clang: warning: argument unused during compilation: '-pthread'
 
 The 5 warnings are where we are making a -dynamiclib and
 the -pthread argument is not necessary:
 
 ./src/interfaces/libpq/
 ./src/interfaces/ecpg/pgtypeslib/
 ./src/interfaces/ecpg/ecpglib/
 ./src/interfaces/ecpg/compatlib/
 ./src/interfaces/ecpg/preproc/
 
 This is interfering with using -Wall -Werror to catch warnings.
 
 Any opinions as to whether this is worth fixing and if so
 what the cleanest approach might be?

 These warnings also happen with older versions of clang.  Now idea how
 to fix yet.  I'm thinking that clang should be fixed, because these
 warnings are stupid.

Yeah, they're utterly stupid; whoever put them in obviously doesn't
have a clue about typical Makefile construction.  I wonder if next
we'll see complaints about unnecessary -D or -I switches.

Having said that, I did look awhile ago about how we might get rid of
them, and it seems not easy; for starters we would need to drop the
assumption that CFLAGS can always be included when linking.  Also,
AFAICT -pthread sometimes *is* required when linking; so it's
not even very obvious when to suppress the switch, even if we could
do so without wholesale rearrangement of our FLAGS handling.

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Compile warnings on OSX 10.10 clang 6.0

2015-04-03 Thread Tom Lane
I wrote:
 Peter Eisentraut pete...@gmx.net writes:
 These warnings also happen with older versions of clang.  Now idea how
 to fix yet.  I'm thinking that clang should be fixed, because these
 warnings are stupid.

 Yeah, they're utterly stupid; whoever put them in obviously doesn't
 have a clue about typical Makefile construction.  I wonder if next
 we'll see complaints about unnecessary -D or -I switches.

 Having said that, I did look awhile ago about how we might get rid of
 them, and it seems not easy; for starters we would need to drop the
 assumption that CFLAGS can always be included when linking.  Also,
 AFAICT -pthread sometimes *is* required when linking; so it's
 not even very obvious when to suppress the switch, even if we could
 do so without wholesale rearrangement of our FLAGS handling.

On the other hand, there's often more than one way to skin a cat.
It occurred to me that maybe we could just turn off this class of warning,
and after some experimentation I found out that
-Wno-unused-command-line-argument does that, at least in the version
of clang that Apple's currently shipping.

Who's for enabling that if the compiler takes it?

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Table-level log_autovacuum_min_duration

2015-04-03 Thread Michael Paquier
On Fri, Apr 3, 2015 at 11:59 PM, Alvaro Herrera
alvhe...@2ndquadrant.com wrote:
 Michael Paquier wrote:
 On Fri, Apr 3, 2015 at 3:26 PM, Michael Paquier wrote:
  [...]
  Fine for me.

 And here are the correct patches. Sorry for that.

 Thanks, pushed.  I added one extra comment to the SIGHUP patch in the
 place where you previously had the exit.

Thanks!
-- 
Michael


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Tom Lane
... btw, has anyone noticed that this patch broke hamerkop and
bowerbird?  Or at least, it's hard to see what other recent commit
would explain the failures they're showing.

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Compile warnings on OSX 10.10 clang 6.0

2015-04-03 Thread Peter Eisentraut
On 4/3/15 4:02 PM, John Gorman wrote:
 I am getting compile warnings on OSX 10.10 from clang 6.0:
 
 clang: warning: argument unused during compilation: '-pthread'
 
 The 5 warnings are where we are making a -dynamiclib and
 the -pthread argument is not necessary:
 
 ./src/interfaces/libpq/
 ./src/interfaces/ecpg/pgtypeslib/
 ./src/interfaces/ecpg/ecpglib/
 ./src/interfaces/ecpg/compatlib/
 ./src/interfaces/ecpg/preproc/
 
 This is interfering with using -Wall -Werror to catch warnings.
 
 Any opinions as to whether this is worth fixing and if so
 what the cleanest approach might be?

These warnings also happen with older versions of clang.  Now idea how
to fix yet.  I'm thinking that clang should be fixed, because these
warnings are stupid.


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] The return value of allocate_recordbuf()

2015-04-03 Thread Michael Paquier
On Fri, Apr 3, 2015 at 9:57 PM, Fujii Masao masao.fu...@gmail.com wrote:
 On Fri, Apr 3, 2015 at 8:37 PM, Michael Paquier
 michael.paqu...@gmail.com wrote:
 On Fri, Apr 3, 2015 at 6:35 PM, Fujii Masao wrote:
 Regarding the second patch, you added the checks of the return value of
 XLogReaderAllocate(). But it seems half-baked. XLogReaderAllocate() still
 uses palloc(), but don't we need to replace it with palloc_extended(), too?

 Doh, you are right. I missed three places. Attached is a new patch
 completing the fix.

 Thanks for the patch! I updated two source code comments and
 changed the log message when XLogReaderAllocate returns NULL
 within XLOG_DEBUG block. Just pushed.

Yes, thanks. This looks good as is.
-- 
Michael


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Unused variable in hashpage.c

2015-04-03 Thread Tom Lane
Petr Jelinek p...@2ndquadrant.com writes:
 my compiler complains about unused variable nblkno in _hash_splitbucket 
 in no-assert build. It looks like relic of commit ed9cc2b5d which 
 removed the only use of that variable besides the Assert.

Fixed, thanks!

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Tom Lane
I wrote:
 FWIW, I think it's sensible to define NumericAbbrevGetDatum and the
 converse, but I'd suggest you just do it like
 #define NumericAbbrevGetDatum(X) Int64GetDatum(X)
 or
 #define NumericAbbrevGetDatum(X) Int32GetDatum(X)

Oh, scratch that, I'd failed to look at the upthread messages.

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Andrew Gierth
 Robert == Robert Haas robertmh...@gmail.com writes:

  It already does; it changes how int64 values are expected to be
  stored in Datum variables. _Everything_ that currently stores an
  int64 value in a Datum is affected.

 Robert But this isn't a value of the SQL type int64.  It's just a
 Robert bit pattern that has to fit inside however big a Datum happens
 Robert to be.

It's a bit pattern which is a signed 32-bit or 64-bit integer, computed
in an int32 or int64. Using something other than Int32GetDatum /
Int64GetDatum for it seems unnecessarily surprising.

  The fact that making this one low-benefit change has introduced no
  less than three separate bugs - the compile error with that #ifdef,
  the use of Int64GetDatum for NANs, and the use of Int64GetDatum for
  the return value of the abbreviation function should possibly be
  taken as a hint to how bad an idea is.

 Robert But all of those are trivial, and the first would have been
 Robert caught by my compiler if I weren't using such a crappy old
 Robert compiler.  If anything that might require as much as 10 lines
 Robert of code churn to fix is not worth doing, very little is worth
 Robert doing.

Trivial maybe, but subtle enough that you missed them (which suggests
that others might too), and a --disable-float8-byval build of the buggy
version only fails regression by a fluke.

(This does rather suggest to me that some better regression tests for
sorting would be a good idea, possibly even including on-disk sorts.)

  If you're determined to go this route - over my protest - then you
  need to do something like define a NumericAbbrevGetDatum(x) macro
  and use it in place of the Int64GetDatum / Int32GetDatum ones for
  both NAN and the return from numeric_abbrev_convert_var.

 Robert Patch for that attached.

That looks reasonable, though I think it could do with a comment
explaining _why_ it's defining its own macros rather than using
Int32*/Int64*. (And I wrote that before seeing Tom's message, even.)

-- 
Andrew (irc:RhodiumToad)


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Compile warnings on OSX 10.10 clang 6.0

2015-04-03 Thread John Gorman
I have confirmed that -Wno-unused-command-line-argument
suppresses the -pthread warning for clang 6.0 and does not
trigger a warning in gcc 4.9.

Works for me!

John

On Fri, Apr 3, 2015 at 5:21 PM, Tom Lane t...@sss.pgh.pa.us wrote:

 I wrote:
  Peter Eisentraut pete...@gmx.net writes:
  These warnings also happen with older versions of clang.  Now idea how
  to fix yet.  I'm thinking that clang should be fixed, because these
  warnings are stupid.

  Yeah, they're utterly stupid; whoever put them in obviously doesn't
  have a clue about typical Makefile construction.  I wonder if next
  we'll see complaints about unnecessary -D or -I switches.

  Having said that, I did look awhile ago about how we might get rid of
  them, and it seems not easy; for starters we would need to drop the
  assumption that CFLAGS can always be included when linking.  Also,
  AFAICT -pthread sometimes *is* required when linking; so it's
  not even very obvious when to suppress the switch, even if we could
  do so without wholesale rearrangement of our FLAGS handling.

 On the other hand, there's often more than one way to skin a cat.
 It occurred to me that maybe we could just turn off this class of warning,
 and after some experimentation I found out that
 -Wno-unused-command-line-argument does that, at least in the version
 of clang that Apple's currently shipping.

 Who's for enabling that if the compiler takes it?

 regards, tom lane



Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Tom Lane
Robert Haas robertmh...@gmail.com writes:
 On Fri, Apr 3, 2015 at 1:39 PM, Andrew Gierth
 and...@tao11.riddles.org.uk wrote:
 If you're determined to go this route - over my protest - then you need
 to do something like define a NumericAbbrevGetDatum(x) macro and use it
 in place of the Int64GetDatum / Int32GetDatum ones for both NAN and the
 return from numeric_abbrev_convert_var.

 Patch for that attached.

FWIW, I think it's sensible to define NumericAbbrevGetDatum and the
converse, but I'd suggest you just do it like

#define NumericAbbrevGetDatum(X) Int64GetDatum(X)
or
#define NumericAbbrevGetDatum(X) Int32GetDatum(X)

I'm not especially a fan of reaching inside the GetDatum macros when
you don't have to.  And the code that's calling these certainly knows
that it's supplying an int64 or int32 respectively.

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Tom Lane
Robert Haas robertmh...@gmail.com writes:
 For those following along at home, the failures are on these queries:

 SELECT 1.1 AS two UNION SELECT 2.2;
 SELECT 1.1 AS two UNION SELECT 2;
 SELECT 1 AS two UNION SELECT 2.2;
 SELECT 1.1 AS three UNION SELECT 2 UNION ALL SELECT 2;

 In each case, the expected result is with the values in ascending
 numerical order.  In each case, the 1 or 1.1 value which ought to
 appear before 2 or 2.2 instead appears after it.  Strictly speaking,
 this is not the wrong answer to the query, and could be perhaps
 explained by the planner choosing a hash aggregate rather than a sort
 + unique plan.  But this patch doesn't change the planner at all, so
 the plan should be the same as it has always been.

Yeah.  We could add an EXPLAIN to make certain, perhaps, but since
none of the other critters are failing I doubt this explanation.

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


[HACKERS] COALESCE() query yield different result with MJ vs. NLJ/HJ

2015-04-03 Thread Qingqing Zhou
The symptom is that the same join query yield different results with
MJ and NLJ/HJ.  Here is a repro:

---
create table t1(a int);create table t2(b int);
insert into t1 values(10); insert into t2 values(2);
analyze t1; analyze t2;
set enable_mergejoin=on; set enable_nestloop=off; set enable_hashjoin=off;
explain analyze select a, b from t1 left join  t2 on coalesce(a, 1) =
coalesce(b,1)  where (coalesce(b,1))0
set enable_mergejoin=off; set enable_nestloop=on; set enable_hashjoin=off;
explain analyze select a, b from t1 left join  t2 on coalesce(a, 1) =
coalesce(b,1)  where (coalesce(b,1))0
---

A possible explanation is that in fix_join_expr_mutator(), we optimize
with the case that if child node already compute an expression then
upper node shall reuse it. In MJ, as coalesce() already computed in
sort node, thus the NULL is directly used for ExecQual(0) for join
filter.

If we take out this optimization the problem is solved but may looks
like an overkill. What's a better fix?

Thanks,
Qingqing


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Robert Haas
On Fri, Apr 3, 2015 at 5:45 PM, Tom Lane t...@sss.pgh.pa.us wrote:
 ... btw, has anyone noticed that this patch broke hamerkop and
 bowerbird?  Or at least, it's hard to see what other recent commit
 would explain the failures they're showing.

I noticed the failure on bowerbird today and I agree that looks an
awful lot like it might be this patch's fault.  The failure on
hamerkop looks like the same issue.  I'm a bit at a loss to explain
exactly what has gone wrong there.  What those machines have in common
is that they are the only 64-bit Windows machines using the Microsoft
toolchain in the buildfarm, but I don't know why that should provoke a
failure.  I seem to remember having some trouble previously with
Microsoft compilers being finickier than others about a shift with a
width greater than or equal to the bit-width of the value, but if
there is such a problem here, I can't spot it.  Nor do I see a
compiler warning in numeric.c which might provide a clue.

For those following along at home, the failures are on these queries:

SELECT 1.1 AS two UNION SELECT 2.2;
SELECT 1.1 AS two UNION SELECT 2;
SELECT 1 AS two UNION SELECT 2.2;
SELECT 1.1 AS three UNION SELECT 2 UNION ALL SELECT 2;

In each case, the expected result is with the values in ascending
numerical order.  In each case, the 1 or 1.1 value which ought to
appear before 2 or 2.2 instead appears after it.  Strictly speaking,
this is not the wrong answer to the query, and could be perhaps
explained by the planner choosing a hash aggregate rather than a sort
+ unique plan.  But this patch doesn't change the planner at all, so
the plan should be the same as it has always been.  And if it is
choosing to sort, then it's clearly doing it wrong, but there doesn't
seem to be anything platform-specific about this code, so I'm
mystified.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Sloppy SSPI error reporting code

2015-04-03 Thread Noah Misch
On Thu, Apr 02, 2015 at 07:31:52AM -0400, Bruce Momjian wrote:
 On Thu, Apr  2, 2015 at 01:44:59AM -0400, Noah Misch wrote:
  On Wed, Apr 01, 2015 at 10:49:01PM -0400, Bruce Momjian wrote:
   On Sat, Jan 10, 2015 at 02:53:13PM -0500, Tom Lane wrote:
While looking at fe-auth.c I noticed quite a few places that weren't
bothering to make error messages localizable (ie, missing libpq_gettext
calls), and/or were failing to add a trailing newline as expected in
libpq error messages.  Perhaps these are intentional but I doubt it.
Most of the instances seemed to be SSPI-related.

I have no intention of fixing these myself, but whoever committed that
code should take a second look.
   
   I looked through that file and only found two cases;  patch attached.
  
  Tom mentioned newline omissions, which you'll find in pg_SSPI_error().
 
 Oh, I accidentally saw the backend version of that function, which
 looked fine.  I have attached a patch for that.

That patch looks reasonable.


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Providing catalog view to pg_hba.conf file - Patch submission

2015-04-03 Thread Pavel Stehule
Hi

2015-03-31 14:38 GMT+02:00 Haribabu Kommi kommi.harib...@gmail.com:

 On Mon, Mar 30, 2015 at 4:34 AM, Pavel Stehule pavel.steh...@gmail.com
 wrote:
  Hi
 
  I checked this patch. I like the functionality and behave.

 Thanks for the review.

 Here I attached updated patch with the following changes.

 1. Addition of two new keyword columns


 keyword_databases - The database name can be all, replication,
 sameuser, samerole and samegroup.
 keyword_roles - The role can be all and a group name prefixed with +.


I am not very happy about name - but I have no better idea :( - maybe
database_mask, user_mask



 The rest of the database and role names are treated as normal database
 and role names.

 2. Added the code changes to identify the names with quoted.


Is it a good idea? Database's names are not quoted every else (in system
catalog). So now, we cannot to use join to this view.

postgres=# select (databases)[1] from pg_hba_conf ;
 databases
---
 omega 2

(4 rows)

postgres=# select datname from pg_database ;
  datname
---
 template1
 template0
 postgres
 omega 2
(4 rows)

I dislike this - we know, so the name must be quoted in file (without it,
the file was incorrect). And if you need quotes, there is a function
quote_ident. If we use quotes elsewhere, then it should be ok, bot not now.
Please, remove it. More, it is not necessary, when you use a keyword
columns.

Regards

Pavel







 3. Updated documentation changes

 4. Regression test is corrected.


 Regards,
 Hari Babu
 Fujitsu Australia



Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Robert Haas
On Fri, Apr 3, 2015 at 3:46 PM, Andrew Gierth
and...@tao11.riddles.org.uk wrote:
 (This does rather suggest to me that some better regression tests for
 sorting would be a good idea, possibly even including on-disk sorts.)

Yeah.  I've been unpleasantly surprised by how easy it is to pass the
regression tests with sorting broken.

   If you're determined to go this route - over my protest - then you
   need to do something like define a NumericAbbrevGetDatum(x) macro
   and use it in place of the Int64GetDatum / Int32GetDatum ones for
   both NAN and the return from numeric_abbrev_convert_var.

  Robert Patch for that attached.

 That looks reasonable, though I think it could do with a comment
 explaining _why_ it's defining its own macros rather than using
 Int32*/Int64*. (And I wrote that before seeing Tom's message, even.)

Agreed.  I have added that and committed this.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Abbreviated keys for Numeric

2015-04-03 Thread Robert Haas
On Fri, Apr 3, 2015 at 9:06 AM, Andrew Gierth
and...@tao11.riddles.org.uk wrote:
 Robert == Robert Haas robertmh...@gmail.com writes:
   No, that's wrong; it must use USE_FLOAT8_BYVAL since that's what the
   definitions of Int64GetDatum / DatumGetInt64 are conditional on. As
   you have it now, it'll break if you build with
   --disable-float8-byval on a 64bit platform.

  Robert I'd prefer to avoid that by avoiding the use of those macros in
  Robert this code path rather than by leaving the top 32 bits of the
  Robert Datum unused

 I don't consider it appropriate to override ./configure in this way.

I don't see how that's overriding configure.  Commit
8472bf7a73487b0535c95e299773b882f7523463, which introduced
--disable-float8-byval in 2008, states that the motivation for this is
that it might break functions using the version 0 calling convention.
It should not propagate, like kudzu, into things that having nothing
to do with how values are passed to V0 functions.  And as far as I can
see, the algorithm that we use to create an abbreviated key for
numeric is entirely decoupled from that question, because none of the
datums were are building here will ever get passed to one.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Possibly a typo in expand_inherited_rtentry()

2015-04-03 Thread Tom Lane
Amit Langote langote_amit...@lab.ntt.co.jp writes:
 Attached does:
 -/* Open rel if needed; we already have required locks */
 +/* Open rel if needed; we already have acquired locks */

 Does that make sense?

No, not particularly.  It could be made to say the locks we require
but I don't find anything wrong with the existing wording (and I'll
bet there is similar wording in many other places).

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] PATCH: adaptive ndistinct estimator v4

2015-04-03 Thread Greg Stark
 The simple workaround for this was adding a fallback to GEE when f[1] or
f[2] is 0. GEE is another estimator described in the paper, behaving much
better in those cases.

For completeness, what's the downside in just always using GEE?


Re: [HACKERS] a fast bloat measurement tool (was Re: Measuring relation free space)

2015-04-03 Thread Abhijit Menon-Sen
At 2015-03-31 22:43:49 +0530, a...@2ndquadrant.com wrote:

 I'm just posting this WIP patch where I've renamed fastbloat to
 pgstatbloat as suggested by Tomas, and added in the documentation, and
 so on.

Here's the revised version that also adds the count of RECENTLY_DEAD and
INSERT/DELETE_IN_PROGRESS tuples to the call to vac_estimate_reltuples.

Tomas, I agree that the build_output_tuple function could use cleaning
up, but it's the same as the corresponding code in pgstattuple, and it
seems to me reasonable to clean both up together in a separate patch.

-- Abhijit
From d11b84627438fca12955dfad77042be0a27c9acc Mon Sep 17 00:00:00 2001
From: Abhijit Menon-Sen a...@2ndquadrant.com
Date: Fri, 26 Dec 2014 12:37:13 +0530
Subject: Add pgstatbloat to pgstattuple

---
 contrib/pgstattuple/Makefile   |   4 +-
 contrib/pgstattuple/pgstatbloat.c  | 340 +
 contrib/pgstattuple/pgstattuple--1.2--1.3.sql  |  18 ++
 .../{pgstattuple--1.2.sql = pgstattuple--1.3.sql} |  18 +-
 contrib/pgstattuple/pgstattuple.control|   2 +-
 doc/src/sgml/pgstattuple.sgml  | 135 
 6 files changed, 513 insertions(+), 4 deletions(-)
 create mode 100644 contrib/pgstattuple/pgstatbloat.c
 create mode 100644 contrib/pgstattuple/pgstattuple--1.2--1.3.sql
 rename contrib/pgstattuple/{pgstattuple--1.2.sql = pgstattuple--1.3.sql} (73%)

diff --git a/contrib/pgstattuple/Makefile b/contrib/pgstattuple/Makefile
index 862585c..d7d27a5 100644
--- a/contrib/pgstattuple/Makefile
+++ b/contrib/pgstattuple/Makefile
@@ -1,10 +1,10 @@
 # contrib/pgstattuple/Makefile
 
 MODULE_big	= pgstattuple
-OBJS		= pgstattuple.o pgstatindex.o $(WIN32RES)
+OBJS		= pgstattuple.o pgstatindex.o pgstatbloat.o $(WIN32RES)
 
 EXTENSION = pgstattuple
-DATA = pgstattuple--1.2.sql pgstattuple--1.1--1.2.sql pgstattuple--1.0--1.1.sql pgstattuple--unpackaged--1.0.sql
+DATA = pgstattuple--1.3.sql pgstattuple--1.2--1.3.sql pgstattuple--1.1--1.2.sql pgstattuple--1.0--1.1.sql pgstattuple--unpackaged--1.0.sql
 PGFILEDESC = pgstattuple - tuple-level statistics
 
 REGRESS = pgstattuple
diff --git a/contrib/pgstattuple/pgstatbloat.c b/contrib/pgstattuple/pgstatbloat.c
new file mode 100644
index 000..2dd1900
--- /dev/null
+++ b/contrib/pgstattuple/pgstatbloat.c
@@ -0,0 +1,340 @@
+/*
+ * contrib/pgstattuple/pgstatbloat.c
+ *
+ * Abhijit Menon-Sen a...@2ndquadrant.com
+ * Portions Copyright (c) 2001,2002	Tatsuo Ishii (from pgstattuple)
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose, without fee, and without a
+ * written agreement is hereby granted, provided that the above
+ * copyright notice and this paragraph and the following two
+ * paragraphs appear in all copies.
+ *
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT,
+ * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
+ * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
+ * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS ON AN AS
+ * IS BASIS, AND THE AUTHOR HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
+ * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ */
+
+#include postgres.h
+
+#include access/visibilitymap.h
+#include access/transam.h
+#include access/xact.h
+#include access/multixact.h
+#include access/htup_details.h
+#include catalog/namespace.h
+#include funcapi.h
+#include miscadmin.h
+#include storage/bufmgr.h
+#include storage/freespace.h
+#include storage/procarray.h
+#include storage/lmgr.h
+#include utils/builtins.h
+#include utils/tqual.h
+#include commands/vacuum.h
+
+PG_FUNCTION_INFO_V1(pgstatbloat);
+
+/*
+ * tuple_percent, dead_tuple_percent and free_percent are computable,
+ * so not defined here.
+ */
+typedef struct pgstatbloat_output_type
+{
+	uint64		table_len;
+	uint64		tuple_count;
+	uint64		misc_count;
+	uint64		tuple_len;
+	uint64		dead_tuple_count;
+	uint64		dead_tuple_len;
+	uint64		free_space;
+	uint64		total_pages;
+	uint64		scanned_pages;
+} pgstatbloat_output_type;
+
+static Datum build_output_type(pgstatbloat_output_type *stat,
+			   FunctionCallInfo fcinfo);
+static Datum pgstatbloat_heap(Relation rel, FunctionCallInfo fcinfo);
+
+/*
+ * build a pgstatbloat_output_type tuple
+ */
+static Datum
+build_output_type(pgstatbloat_output_type *stat, FunctionCallInfo fcinfo)
+{
+#define NCOLUMNS	10
+#define NCHARS		32
+
+	HeapTuple	tuple;
+	char	   *values[NCOLUMNS];
+	char		values_buf[NCOLUMNS][NCHARS];
+	int			i;
+	double		tuple_percent;
+	double		dead_tuple_percent;
+	double		free_percent;	/* free/reusable space in % */
+	double		scanned_percent;
+	TupleDesc	tupdesc;
+	AttInMetadata *attinmeta;
+
+	/* Build a tuple