Kovacs Zoltan wrote: >> Use the "serial" column type. >Unfortunately it's not what I expect. Assume that I have an arbitrary >"SELECT expr1 as column1, expr2 as column2, ..." which gives > >column1 | column2 | ... >--------+---------+- ... >......data.............. >........................ > >I would like to get the same result with the only plus column row_no: > >row_no | column1 | column2 | ... >-------+---------+---------+- ... > 1 | ......data.............. > 2 | ........................ >................................. > >with a new SELECT statement: "SELECT ?????, expr1 as column1, expr2 as >column2, ...". What to write instead of ?????? Here is a method which is fairly cumbersome, but will do what you want. (Whether what you want is useful, is another matter. The row numbers have no meaning except to delineate which row is printed after which; they bear no relation to their order in the table.) Create the C code shown in the attachment. Compile it (the example shown is for Linux, see the programmer's manual for how to do it on other systems): gcc -fpic -c rowno.c gcc -shared -o rowno.so rowno.o In the database, create functions as shown (remember to change the directory from /tmp!): CREATE FUNCTION reset_row() RETURNS int4 AS '/tmp/rowno.so' LANGUAGE 'C'; CREATE FUNCTION row_no() RETURNS int4 AS '/tmp/rowno.so' LANGUAGE 'C'; Now you can use the function: bray=# select row_no() as row,id,name from person; row | id | name ------+--------+------------------------------------------------------- 1 | 100001 | Mr Graham Love (Director) 2 | 100002 | AILEEN BROWN ... but you have to do this in between queries: bray=# select reset_row(); because the numbers don't reset themselves: bray=# select row_no() as row,id,name from person; row | id | name -------+--------+------------------------------------------------------- 6015 | 100001 | Mr Graham Love (Director) 6016 | 100002 | AILEEN BROWN ...
#include "postgres.h" #include "fmgr.h" static int32 row = 0; PG_FUNCTION_INFO_V1(row_no); Datum row_no() { row += 1; PG_RETURN_INT32(row); } PG_FUNCTION_INFO_V1(reset_row); Datum reset_row() { row = 0; PG_RETURN_INT32(row); }
Oliver Elphick [EMAIL PROTECTED] Isle of Wight http://www.lfix.co.uk/oliver PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47 6B 7E 39 CC 56 E4 C1 47 GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C ======================================== "Is any one of you in trouble? He should pray. Is anyone happy? Let him sing songs of praise. Is any one of you sick? He should call the elders of the church to pray over him...The prayer of a righteous man is powerful and effective." James 5:13,14,16
---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly