pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
obtuse plpgsql function needs
14+ messages / 5 participants
[nested] [flat]

* obtuse plpgsql function needs
@ 2003-07-22 22:31  Robert Treat <xzilla@users.sourceforge.net>
  0 siblings, 3 replies; 14+ messages in thread

From: Robert Treat @ 2003-07-22 22:31 UTC (permalink / raw)
  To: pgsql-sql

given 

create table t1 (f,f1,f2,f3);
create table t2 (f,f4,f5,f6);

i'm trying to create a function concat() that does something like:

select f,concat() as info from t1;

which returns a result set equivalent to:
select f,('f1:' || f1 || '- f2:' || f2 || '- f3:' || f3) as x from t1;

or
select f,concat() as info from t2;
returns equivalent

select f,('f4:' || f4 || ' - f5:' || f5 || ' - f6:' || f6) as x from t2;


I'm starting to believe this is not possible, has anyone already done
it? :-)

Robert Treat
-- 
Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL




^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-22 23:21  Josh Berkus <josh@agliodbs.com>
  parent: Robert Treat <xzilla@users.sourceforge.net>
  2 siblings, 0 replies; 14+ messages in thread

From: Josh Berkus @ 2003-07-22 23:21 UTC (permalink / raw)
  To: Robert Treat <xzilla@users.sourceforge.net>; pgsql-sql

Robert,

> I'm starting to believe this is not possible, has anyone already done
> it? :-)

It sounds doable but you need more explicit examples; I can't quite tell what 
you're trying to do.  

-- 
Josh Berkus
Aglio Database Solutions
San Francisco



^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-22 23:33  elein <elein@varlena.com>
  parent: Robert Treat <xzilla@users.sourceforge.net>
  2 siblings, 1 reply; 14+ messages in thread

From: elein @ 2003-07-22 23:33 UTC (permalink / raw)
  To: Robert Treat <xzilla@users.sourceforge.net>; +Cc: pgsql-sql

You'll need to pass the values down to your
concat function (which I suggest you don't call concat)
and have it return a text type.

What exactly is your problem?  I must be missing something.

elein

On Tue, Jul 22, 2003 at 06:31:52PM -0400, Robert Treat wrote:
> given 
> 
> create table t1 (f,f1,f2,f3);
> create table t2 (f,f4,f5,f6);
> 
> i'm trying to create a function concat() that does something like:
> 
> select f,concat() as info from t1;
> 
> which returns a result set equivalent to:
> select f,('f1:' || f1 || '- f2:' || f2 || '- f3:' || f3) as x from t1;
> 
> or
> select f,concat() as info from t2;
> returns equivalent
> 
> select f,('f4:' || f4 || ' - f5:' || f5 || ' - f6:' || f6) as x from t2;
> 
> 
> I'm starting to believe this is not possible, has anyone already done
> it? :-)
> 
> Robert Treat
> -- 
> Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 8: explain analyze is your friend
> 



^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-23 13:06  Robert Treat <xzilla@users.sourceforge.net>
  parent: elein <elein@varlena.com>
  0 siblings, 2 replies; 14+ messages in thread

From: Robert Treat @ 2003-07-23 13:06 UTC (permalink / raw)
  To: elein <elein@varlena.com>; +Cc: pgsql-sql

On Tue, 2003-07-22 at 19:33, elein wrote:
> You'll need to pass the values down to your
> concat function (which I suggest you don't call concat)
> and have it return a text type.
> 
> What exactly is your problem?  I must be missing something.
> 

The problem is that I need the function to be generic so that I don't
have to pass the values down to the function, it just grabs the values
automagically based on the table it's being called against.

Robert Treat 

> elein
> 
> On Tue, Jul 22, 2003 at 06:31:52PM -0400, Robert Treat wrote:
> > given 
> > 
> > create table t1 (f,f1,f2,f3);
> > create table t2 (f,f4,f5,f6);
> > 
> > i'm trying to create a function concat() that does something like:
> > 
> > select f,concat() as info from t1;
> > 
> > which returns a result set equivalent to:
> > select f,('f1:' || f1 || '- f2:' || f2 || '- f3:' || f3) as x from t1;
> > 
> > or
> > select f,concat() as info from t2;
> > returns equivalent
> > 
> > select f,('f4:' || f4 || ' - f5:' || f5 || ' - f6:' || f6) as x from t2;
> > 
-- 
Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL




^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-23 14:04  Robert Treat <xzilla@users.sourceforge.net>
  parent: Robert Treat <xzilla@users.sourceforge.net>
  1 sibling, 0 replies; 14+ messages in thread

From: Robert Treat @ 2003-07-23 14:04 UTC (permalink / raw)
  To: elein <elein@varlena.com>; +Cc: pgsql-sql

On Wed, 2003-07-23 at 09:06, Robert Treat wrote:
> On Tue, 2003-07-22 at 19:33, elein wrote:
> > You'll need to pass the values down to your
> > concat function (which I suggest you don't call concat)
> > and have it return a text type.
> > 
> > What exactly is your problem?  I must be missing something.
> > 
> 
> The problem is that I need the function to be generic so that I don't
> have to pass the values down to the function, it just grabs the values
> automagically based on the table it's being called against.
> 
> Robert Treat 
> 

Hmm... I neglected to mention that I was trying to find a solution that
didn't use ctid or oid. If I abandon that path I think it will be
straightforward... 

Robert Treat
-- 
Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL




^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-23 18:12  elein <elein@varlena.com>
  parent: Robert Treat <xzilla@users.sourceforge.net>
  1 sibling, 2 replies; 14+ messages in thread

From: elein @ 2003-07-23 18:12 UTC (permalink / raw)
  To: Robert Treat <xzilla@users.sourceforge.net>; +Cc: elein@varlena.com; pgsql-sql



How will you know in your function what the field
names are (you won't) and how many fields to concat
unless the function would only work on a fixed number
of fields?

If it only works on a fixed number of fields,
you still have:
	myconcat( text, text, text, text )

called by 
	select f, myconcat( f,f1,f2,f3) from t1;
and
	select f, myconcat( f,f4,f5,f6) from t2;

The cost is typing in the param list.

For a variable length record it is trickier.
You can do it in C, of course.

The key pieces needed to do this are:
	* Ability to pass a generic RECORD to a function.
		This *might* be in 7.4 but I'm not sure.
		myconcat( t1 ); or possibly myconcat (t1.*);
	* Ability to know the number of columns in the RECORD
		A pg_catalog query
	* Ability to access the columns by order in a loop
		AFAIK you have to access the columns by name.

If you can work through those issues, then
you'll have it.  The pieces are available in
several areas, the generic types and languages
like plpython and plperl which may be able to
loop through a generic tuple, if they could input
a tuple.

I will hang onto this problem and if either of
us finds a solution, I'd like to publish it in
general bits.

elein



On Wed, Jul 23, 2003 at 09:06:49AM -0400, Robert Treat wrote:
> On Tue, 2003-07-22 at 19:33, elein wrote:
> > You'll need to pass the values down to your
> > concat function (which I suggest you don't call concat)
> > and have it return a text type.
> > 
> > What exactly is your problem?  I must be missing something.
> > 
> 
> The problem is that I need the function to be generic so that I don't
> have to pass the values down to the function, it just grabs the values
> automagically based on the table it's being called against.
> 
> Robert Treat 
> 
> > elein
> > 
> > On Tue, Jul 22, 2003 at 06:31:52PM -0400, Robert Treat wrote:
> > > given 
> > > 
> > > create table t1 (f,f1,f2,f3);
> > > create table t2 (f,f4,f5,f6);
> > > 
> > > i'm trying to create a function concat() that does something like:
> > > 
> > > select f,concat() as info from t1;
> > > 
> > > which returns a result set equivalent to:
> > > select f,('f1:' || f1 || '- f2:' || f2 || '- f3:' || f3) as x from t1;
> > > 
> > > or
> > > select f,concat() as info from t2;
> > > returns equivalent
> > > 
> > > select f,('f4:' || f4 || ' - f5:' || f5 || ' - f6:' || f6) as x from t2;
> > > 
> -- 
> Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL
> 



^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-23 18:24  Josh Berkus <josh@agliodbs.com>
  parent: elein <elein@varlena.com>
  1 sibling, 0 replies; 14+ messages in thread

From: Josh Berkus @ 2003-07-23 18:24 UTC (permalink / raw)
  To: elein <elein@varlena.com>; Robert Treat <xzilla@users.sourceforge.net>; +Cc: elein@varlena.com; pgsql-sql

Elein, Robert,
 
I think Robert can do this in 7.3.3, and in PL/pgSQL.  But I'm not going any 
further on it until Robert clarifies his examples, because I'm not sure what 
he's talking about.  

In your example, Robert, you use "f1" to indicate both the column f1 and the 
value of the column f1.  This makes it impossible for me to understand which 
of the two you want.

Try again?

-- 
Josh Berkus
Aglio Database Solutions
San Francisco



^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-23 19:15  Tom Lane <tgl@sss.pgh.pa.us>
  parent: elein <elein@varlena.com>
  1 sibling, 1 reply; 14+ messages in thread

From: Tom Lane @ 2003-07-23 19:15 UTC (permalink / raw)
  To: elein <elein@varlena.com>; +Cc: Robert Treat <xzilla@users.sourceforge.net>; pgsql-sql

elein <elein@varlena.com> writes:
> You can do it in C, of course.

Yeah.  Also you could do it easily in plperl or pltcl (composite-type
arguments get passed as perl hashes or Tcl arrays respectively).
plpgsql does not have any facility for run-time determination of field
names, so you're pretty much out of luck in that particular language.

			regards, tom lane



^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-23 19:27  elein <elein@varlena.com>
  parent: Tom Lane <tgl@sss.pgh.pa.us>
  0 siblings, 1 reply; 14+ messages in thread

From: elein @ 2003-07-23 19:27 UTC (permalink / raw)
  To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: elein <elein@varlena.com>; Robert Treat <xzilla@users.sourceforge.net>; pgsql-sql

So, other than C, plperl or pltcl is the way to go.
As long as they can input generic composite types
(I wasn't sure of that, but I should have known), 
they can access columns as array elements so you can
loop through them. And they'll tell you the number
of arguments. Ta da!

elein

On Wed, Jul 23, 2003 at 03:15:50PM -0400, Tom Lane wrote:
> elein <elein@varlena.com> writes:
> > You can do it in C, of course.
> 
> Yeah.  Also you could do it easily in plperl or pltcl (composite-type
> arguments get passed as perl hashes or Tcl arrays respectively).
> plpgsql does not have any facility for run-time determination of field
> names, so you're pretty much out of luck in that particular language.
> 
> 			regards, tom lane
> 



^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-23 19:38  greg@turnstep.com
  parent: Robert Treat <xzilla@users.sourceforge.net>
  2 siblings, 1 reply; 14+ messages in thread

From: greg@turnstep.com @ 2003-07-23 19:38 UTC (permalink / raw)
  To: pgsql-sql


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



Perhaps something like this?. Called like thus:

SELECT a,b,c,msgmaker('t1',ctid) FROM t1 WHERE a=b;


CREATE OR REPLACE FUNCTION msgmaker(text,tid) RETURNS text AS '

DECLARE

  mytable ALIAS FOR $1;
  mytid   ALIAS FOR $2;
  myctid  TEXT;

  myquery TEXT;
  mylen   SMALLINT := 20;
  yourlen SMALLINT;
  mydec   SMALLINT;
  myinfo  TEXT;
  myrec   RECORD;
  biglist TEXT := \'Error\';

BEGIN

  myquery := \'
    SELECT length(attname) AS lenny FROM pg_attribute
    WHERE attnum >=1
    AND attrelid = (SELECT oid FROM pg_class WHERE relname = \'\'\' || mytable || \'\'\')
    ORDER BY 1 DESC LIMIT 1\';

  FOR myrec IN EXECUTE myquery LOOP
    mylen := myrec.lenny;
  END LOOP;

  myquery := \'
    SELECT attname, atttypid, atttypmod FROM pg_attribute
    WHERE attnum >=1
    AND attrelid = (SELECT oid FROM pg_class WHERE relname = \'\'\' || mytable || \'\'\')
    ORDER BY attname ASC\';

  myinfo := \'SELECT \';

  FOR myrec IN EXECUTE myquery LOOP
    myinfo := myinfo || \'\'\'- \' || myrec.attname || \': \';
    yourlen := LENGTH(myrec.attname);
    LOOP
      myinfo := myinfo || \' \';
      yourlen := yourlen + 1;
      EXIT WHEN yourlen > mylen;
    END LOOP;
    myinfo := myinfo || \'\'\' || COALESCE(\';
    IF myrec.atttypid = 1184 THEN
      myinfo := myinfo || \'TO_CHAR(\' || myrec.attname || \',\'\'Mon DD, YYYY HH24:MI\'\')\';
    ELSIF myrec.atttypid = 16 THEN
      myinfo := myinfo || \'CASE WHEN \' || myrec.attname || \' IS TRUE THEN \'\'True\'\' ELSE \'\'False\'\' END\';
    ELSIF myrec.atttypid = 17 THEN
      myinfo := myinfo || \'ENCODE(\' || myrec.attname || \',\'\'hex\'\')\';
    ELSIF myrec.atttypid = 1700 THEN
      SELECT substr(rtrim(format_type(myrec.atttypid, myrec.atttypmod),\')\'), position(\',\' IN format_type(myrec.atttypid, myrec.atttypmod))+1) INTO mydec;
      myinfo := myinfo || \'TO_CHAR(\' || myrec.attname || \',\'\'FM99999999990\';
      IF mydec > 1 THEN
        myinfo := myinfo || \'.\';
        LOOP
          myinfo := myinfo || \'0\';
          mydec := mydec - 1;
          EXIT WHEN mydec < 1;
        END LOOP;
      END IF;
      myinfo := myinfo || \'\'\')\';
    ELSE 
      myinfo := myinfo || myrec.attname;
    END IF;
    myinfo := myinfo || \'::text,\'\'<null>\'\'::text) || \'\'\\\\n\'\' || \\n\';
  END LOOP;

  SELECT mytid INTO myctid;

  myinfo := myinfo || \'\'\'\\\\n\'\' AS info FROM \' || mytable || \' WHERE ctid = \'\'\' || myctid || \'\'\'\';

  FOR myrec IN EXECUTE myinfo LOOP
    biglist := myrec.info;
  END LOOP;

  RETURN biglist;

END;

' LANGUAGE 'plpgsql';




- --
Greg Sabino Mullane greg@turnstep.com
PGP Key: 0x14964AC8 200307231536
-----BEGIN PGP SIGNATURE-----
Comment: http://www.turnstep.com/pgp.html

iD8DBQE/HuPCvJuQZxSWSsgRAnNsAJ9Qljeo+2NkBIp17TKb6SRf2T6WwACg8bwV
A2TBRJdMzk0jpw67sIk3+uc=
=cjEZ
-----END PGP SIGNATURE-----





^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-23 20:01  Robert Treat <xzilla@users.sourceforge.net>
  parent: greg@turnstep.com
  0 siblings, 1 reply; 14+ messages in thread

From: Robert Treat @ 2003-07-23 20:01 UTC (permalink / raw)
  To: greg@turnstep.com; +Cc: pgsql-sql

Questions for the group:

1) any way to do this without the ctid/oid? Sounds like I could do
select a,b,msgmaker(*) from t1 where a=b; in pltcl (which was an early
inclination I abandoned, perhaps prematurely)

2) would it be faster in pltcl? seems like it would if i didn't have to
do the catalog lookups, but is pltcl inherently faster anyways?

thanks for the input so far.

Robert Treat

On Wed, 2003-07-23 at 15:38, greg@turnstep.com wrote:
> SELECT a,b,c,msgmaker('t1',ctid) FROM t1 WHERE a=b;
> 
> 
> CREATE OR REPLACE FUNCTION msgmaker(text,tid) RETURNS text AS '
> 
> DECLARE
> 
>   mytable ALIAS FOR $1;
>   mytid   ALIAS FOR $2;
>   myctid  TEXT;
> 
>   myquery TEXT;
>   mylen   SMALLINT := 20;
>   yourlen SMALLINT;
>   mydec   SMALLINT;
>   myinfo  TEXT;
>   myrec   RECORD;
>   biglist TEXT := \'Error\';
> 
> BEGIN
> 
>   myquery := \'
>     SELECT length(attname) AS lenny FROM pg_attribute
>     WHERE attnum >=1
>     AND attrelid = (SELECT oid FROM pg_class WHERE relname = \'\'\' || mytable || \'\'\')
>     ORDER BY 1 DESC LIMIT 1\';
> 
>   FOR myrec IN EXECUTE myquery LOOP
>     mylen := myrec.lenny;
>   END LOOP;
> 
>   myquery := \'
>     SELECT attname, atttypid, atttypmod FROM pg_attribute
>     WHERE attnum >=1
>     AND attrelid = (SELECT oid FROM pg_class WHERE relname = \'\'\' || mytable || \'\'\')
>     ORDER BY attname ASC\';
> 
>   myinfo := \'SELECT \';
> 
>   FOR myrec IN EXECUTE myquery LOOP
>     myinfo := myinfo || \'\'\'- \' || myrec.attname || \': \';
>     yourlen := LENGTH(myrec.attname);
>     LOOP
>       myinfo := myinfo || \' \';
>       yourlen := yourlen + 1;
>       EXIT WHEN yourlen > mylen;
>     END LOOP;
>     myinfo := myinfo || \'\'\' || COALESCE(\';
>     IF myrec.atttypid = 1184 THEN
>       myinfo := myinfo || \'TO_CHAR(\' || myrec.attname || \',\'\'Mon DD, YYYY HH24:MI\'\')\';
>     ELSIF myrec.atttypid = 16 THEN
>       myinfo := myinfo || \'CASE WHEN \' || myrec.attname || \' IS TRUE THEN \'\'True\'\' ELSE \'\'False\'\' END\';
>     ELSIF myrec.atttypid = 17 THEN
>       myinfo := myinfo || \'ENCODE(\' || myrec.attname || \',\'\'hex\'\')\';
>     ELSIF myrec.atttypid = 1700 THEN
>       SELECT substr(rtrim(format_type(myrec.atttypid, myrec.atttypmod),\')\'), position(\',\' IN format_type(myrec.atttypid, myrec.atttypmod))+1) INTO mydec;
>       myinfo := myinfo || \'TO_CHAR(\' || myrec.attname || \',\'\'FM99999999990\';
>       IF mydec > 1 THEN
>         myinfo := myinfo || \'.\';
>         LOOP
>           myinfo := myinfo || \'0\';
>           mydec := mydec - 1;
>           EXIT WHEN mydec < 1;
>         END LOOP;
>       END IF;
>       myinfo := myinfo || \'\'\')\';
>     ELSE 
>       myinfo := myinfo || myrec.attname;
>     END IF;
>     myinfo := myinfo || \'::text,\'\'<null>\'\'::text) || \'\'\\\\n\'\' || \\n\';
>   END LOOP;
> 
>   SELECT mytid INTO myctid;
> 
>   myinfo := myinfo || \'\'\'\\\\n\'\' AS info FROM \' || mytable || \' WHERE ctid = \'\'\' || myctid || \'\'\'\';
> 
>   FOR myrec IN EXECUTE myinfo LOOP
>     biglist := myrec.info;
>   END LOOP;
> 
>   RETURN biglist;
> 
> END;
> 
> ' LANGUAGE 'plpgsql';
> 
-- 
Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL




^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-23 20:11  Josh Berkus <josh@agliodbs.com>
  parent: Robert Treat <xzilla@users.sourceforge.net>
  0 siblings, 0 replies; 14+ messages in thread

From: Josh Berkus @ 2003-07-23 20:11 UTC (permalink / raw)
  To: Robert Treat <xzilla@users.sourceforge.net>; greg@turnstep.com; +Cc: pgsql-sql

Robert,

> 2) would it be faster in pltcl? seems like it would if i didn't have to
> do the catalog lookups, but is pltcl inherently faster anyways?

Probably, yes.   Execution of dynamic query strings in PL/pgSQL tends to be 
pretty slow.

-- 
-Josh Berkus
 Aglio Database Solutions
 San Francisco




^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-24 05:07  Tom Lane <tgl@sss.pgh.pa.us>
  parent: elein <elein@varlena.com>
  0 siblings, 1 reply; 14+ messages in thread

From: Tom Lane @ 2003-07-24 05:07 UTC (permalink / raw)
  To: elein <elein@varlena.com>; +Cc: Robert Treat <xzilla@users.sourceforge.net>; pgsql-sql

elein <elein@varlena.com> writes:
> So, other than C, plperl or pltcl is the way to go.
> As long as they can input generic composite types
> (I wasn't sure of that, but I should have known), 

Come to think of it, that is a problem: we don't have any way to declare
a function as taking "any tuple type".  So even though pltcl or plperl
functions could be written to work with such input, we can't declare them.
This is a problem even for C functions.  You could declare a C function
as taking "any", but then you can't even check that what you got was a
tuple ...

Something to work on for 7.5, I suppose.

			regards, tom lane



^ permalink  raw  reply  [nested|flat] 14+ messages in thread

* Re: obtuse plpgsql function needs
@ 2003-07-24 19:03  elein <elein@varlena.com>
  parent: Tom Lane <tgl@sss.pgh.pa.us>
  0 siblings, 0 replies; 14+ messages in thread

From: elein @ 2003-07-24 19:03 UTC (permalink / raw)
  To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: elein <elein@varlena.com>; Robert Treat <xzilla@users.sourceforge.net>; pgsql-sql

Bruce--
Something for the todo list. This would be extremely
handy.  At minimum C functions should be able to 
ask the type of thing that was actually passed in and get
a legitimate answer even if the type were a 
rowtype.

This will also lead to the need for unnamed rowtypes,
sooner or later.

I know, I know, send a patch.

--elein

On Thu, Jul 24, 2003 at 01:07:18AM -0400, Tom Lane wrote:
> elein <elein@varlena.com> writes:
> > So, other than C, plperl or pltcl is the way to go.
> > As long as they can input generic composite types
> > (I wasn't sure of that, but I should have known), 
> 
> Come to think of it, that is a problem: we don't have any way to declare
> a function as taking "any tuple type".  So even though pltcl or plperl
> functions could be written to work with such input, we can't declare them.
> This is a problem even for C functions.  You could declare a C function
> as taking "any", but then you can't even check that what you got was a
> tuple ...
> 
> Something to work on for 7.5, I suppose.
> 
> 			regards, tom lane
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
> 
>                http://archives.postgresql.org
> 



^ permalink  raw  reply  [nested|flat] 14+ messages in thread


end of thread, other threads:[~2003-07-24 19:03 UTC | newest]

Thread overview: 14+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2003-07-22 22:31 obtuse plpgsql function needs Robert Treat <xzilla@users.sourceforge.net>
2003-07-22 23:21 ` Josh Berkus <josh@agliodbs.com>
2003-07-22 23:33 ` elein <elein@varlena.com>
2003-07-23 13:06   ` Robert Treat <xzilla@users.sourceforge.net>
2003-07-23 14:04     ` Robert Treat <xzilla@users.sourceforge.net>
2003-07-23 18:12     ` elein <elein@varlena.com>
2003-07-23 18:24       ` Josh Berkus <josh@agliodbs.com>
2003-07-23 19:15       ` Tom Lane <tgl@sss.pgh.pa.us>
2003-07-23 19:27         ` elein <elein@varlena.com>
2003-07-24 05:07           ` Tom Lane <tgl@sss.pgh.pa.us>
2003-07-24 19:03             ` elein <elein@varlena.com>
2003-07-23 19:38 ` greg@turnstep.com
2003-07-23 20:01   ` Robert Treat <xzilla@users.sourceforge.net>
2003-07-23 20:11     ` Josh Berkus <josh@agliodbs.com>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox