writing a MIN(RECORD) aggregate

From: Sam Mason <sam(at)samason(dot)me(dot)uk>
To: pgsql-hackers(at)postgresql(dot)org
Subject: writing a MIN(RECORD) aggregate
Date: 2008-03-20 19:23:32
Message-ID: 20080320192332.GF6870@frubble.xen.chris-lamb.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

I'm trying to write a version of the MIN aggregate for values of RECORD
type. I'm somewhat stuck on getting type information about the argument
out, I can determine how many attributes it's got but I can't seem to do
any better than that. Does anyone have any good pointers into the code
for places to help me understand what's happening?

The reason for doing this is mainly because I think it'd be nicer to be
doing things like:

SELECT i, (MIN((j,k))).k
FROM tbl
GROUP BY i;

instead of:

SELECT DISTINCT ON (i) i, k
FROM tbl
ORDER BY i,j,k;

Which as far as I can tell should produce identical results, except the
first has cleaner semantics. It also allows you to combine MIN and MAX
in the same query, giving the value of k for the smallest and largest j
in this example--requiring two queries if it was done using the DISTINCT
ON method.

Sam

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Kenneth Marshall 2008-03-20 19:48:20 Re: Maximum statistics target
Previous Message Dawid Kuroczko 2008-03-20 18:51:56 Re: Lazy constraints / defaults