Thread: View unique rowid

View unique rowid

From
"David Klugmann"
Date:
Hi
Is it possible to refer to a unique row identifier on a view ?

I have the following view but in a subsequent select I need to refer to
each row's unique identifier and I know oid's are not valid for a view.

create view persontransit
as
select personid, planet, name as aspectname, position as planetposition,
position+angle as transitposition
from personplanet, aspect
union
select personid, planet, name as aspectname, position as planetposition,
position-angle as transitposition
from personplanet, aspect
where name != 'OPPOSITION';

Many thanks

David




Re: View unique rowid

From
Rafa Couto
Date:
> Is it possible to refer to a unique row identifier on a view ?
>
> I have the following view but in a subsequent select I need to refer to
> each row's unique identifier and I know oid's are not valid for a view.


You can get an oid from some table in view definition. May be it
results to resolve your problem...

You can also try "create temp sequence" (review
http://archives.postgresql.org/pgsql-sql/2005-05/msg00126.php)


select 'saludos';

--
Rafa Couto (caligari)
mailto:rafacouto@gmail.com


Re: View unique rowid

From
"David Klugmann"
Date:
Many thanks

I think the problem with using the oid from the primary table is that may 
rows in the view definition will get the same oid because of the union.

Thanks very much anyway.

I will look at the temporary sequence although I am not sure if sequences 
work with views.

Regards

David

>From: Rafa Couto <rafacouto@gmail.com>
>Reply-To: Rafa Couto <rafacouto@gmail.com>
>To: David Klugmann <dklugmann@hotmail.com>
>CC: pgsql-sql@postgresql.org
>Subject: Re: [SQL] View unique rowid
>Date: Wed, 1 Jun 2005 16:53:19 +0200
>
> > Is it possible to refer to a unique row identifier on a view ?
> >
> > I have the following view but in a subsequent select I need to refer to
> > each row's unique identifier and I know oid's are not valid for a view.
>
>
>You can get an oid from some table in view definition. May be it
>results to resolve your problem...
>
>You can also try "create temp sequence" (review
>http://archives.postgresql.org/pgsql-sql/2005-05/msg00126.php)
>
>
>select 'saludos';
>
>--
>Rafa Couto (caligari)
>mailto:rafacouto@gmail.com
>
>---------------------------(end of broadcast)---------------------------
>TIP 4: Don't 'kill -9' the postmaster




Re: View unique rowid

From
Achilleus Mantzios
Date:
O David Klugmann έγραψε στις Jun 1, 2005 :

> 
> Hi
> Is it possible to refer to a unique row identifier on a view ?
> 
> I have the following view but in a subsequent select I need to refer to
> each row's unique identifier and I know oid's are not valid for a view.

Provided your ids are 4 bytes long, you could try to build an artificial 
id as

> 
> create view persontransit
> as
> select personid, planet, name as aspectname, position as planetposition,

SELECT personid::int8 as viewid,....

> position+angle as transitposition
> from personplanet, aspect
> union
> select personid, planet, name as aspectname, position as planetposition,

SELECT X'1'::int8<<32 | personid::int8 as viewid...

> position-angle as transitposition
> from personplanet, aspect
> where name != 'OPPOSITION';
> 
> Many thanks
> 
> David
>

that way the viewid is unique, + you know which part of the view
it represents by masking on the 33th bit (4294967296),
while you can get the actual personid by masking with
X'FFFFFFFF' (4294967295)
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
>       joining column's datatypes do not match
> 

-- 
-Achilleus