Обсуждение: View unique rowid

Поиск
Список
Период
Сортировка

View unique rowid

От
"David Klugmann"
Дата:
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

От
Rafa Couto
Дата:
> 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

От
"David Klugmann"
Дата:
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

От
Achilleus Mantzios
Дата:
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