inheritance of functions - Mailing list pgsql-hackers

From Andrzej Mazurkiewicz
Subject inheritance of functions
Date
Msg-id 13288F4408ADD11186FF0060B06A43130164F976@MSGWAW1
Whole thread Raw
List pgsql-hackers
Hello.
I have not got any help from SQL and GENERAL groups so I send my problem to
you.


In Postgres Users Guide, CREATE TABLE section, the following is stated:
Postgres automatically allows the created table to inherit functions on
tables above it in the inheritance hierarchy. 
         Aside: Inheritance of functions is done according to the
conventions of the Common Lisp Object System (CLOS). 

I have tried different constructs but I have not been able to create such a
function. Can anybody send me an example of a function that will be
inherited by inherited table? I. e.
create table A (
.
.
);

create function F ...

create table B (
..
) inherits (A);

Now I assume that I can somehow use function F on table B 

The specific example is given below !!

Thank you, 
Regards,
Andrzej Mazurkiewicz


> -----Original Message-----
> From:    Andrzej Mazurkiewicz 
> Sent:    27 paYdziernika 1999 18:09
> To:    'pgsql-general@hub.org'
> Subject:    RE: [GENERAL] FW: inheritance of functions
> 
> Hello.
> Here is an example of my problem:
> 
> ccbslin2:~/lipa$ psql -c "drop database archimp0;" template1
> DESTROYDB
> ccbslin2:~/lipa$ psql -c "create database archimp0;" template1
> CREATEDB
> ccbslin2:~/lipa$ psql -f funinh1.sql archimp0
> BEGIN WORK;
> BEGIN
> CREATE TABLE A (
>         liczba float
> );
> CREATE
> COMMIT WORK;
> END
> 
> BEGIN WORK;
> BEGIN
> CREATE FUNCTION suma (A) RETURNS float
>         AS 'SELECT $1.liczba AS suma;' LANGUAGE 'sql';
> CREATE
> COMMIT WORK;
> END
> 
> BEGIN WORK;
> BEGIN
> CREATE TABLE B (
>         liczwym float
> ) INHERITS (A)
> ;
> CREATE
> COMMIT WORK;
> END
> 
> BEGIN WORK;
> BEGIN
> INSERT INTO A (liczba) VALUES (1.56);
> INSERT 71414 1
> COMMIT WORK;
> END
> 
> BEGIN WORK;
> BEGIN
> INSERT INTO B (liczba, liczwym) VALUES (2.5, 3.2);
> INSERT 71415 1
> COMMIT WORK;
> END
> 
> select liczba, suma(A) from A;
> liczba|suma
> ------+----
>   1.56|1.56
> (1 row)
> 
> select liczba, suma(A) from A*;
> liczba|suma
> ------+----
>   1.56|1.56
>    2.5| 2.5
> (2 rows)
> 
[Andrzej Mazurkiewicz]  --
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>  
> select liczba, suma(B) from B; [Andrzej Mazurkiewicz]         !!!!!!! 
> ERROR:  Functions on sets are not yet supported [Andrzej Mazurkiewicz]
> !!!!!!! 
> 
[Andrzej Mazurkiewicz]  --
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

> EOF
> 
> --------------------------------------------------------------------------
> ----------------------------------------
> 
> After invoking psql:
> 
> 
> archimp0=> select * from pg_proc where proname = 'suma';
> proname|proowner|prolang|proisinh|proistrusted|proiscachable|pronargs|pror
> etset|prorettype|
> proargtypes|probyte_pct|properbyte_cpu|propercall_cpu|proouti
> n_ratio|prosrc                   |probin
> -------+--------+-------+--------+------------+-------------+--------+----
> -----+----------+-------------------+-----------+--------------+----------
> ----+--------------+-------------------------+------
> suma   |     302|     14|f       |t           |f            |       1|f
> |       701|71393 0 0 0 0 0 0 0|        100|             0|             0|
> 100|SELECT $1.liczba AS suma;|-     
> (1 row)
> 
> archimp0=> 
> 
> I am looking for working example !!!!!
> 
> Regards,
> Andrzej Mazurkiewicz
> -----Original Message-----
> From:    Aaron J. Seigo [SMTP:aaron@gtv.ca]
> Sent:    27 paYdziernika 1999 17:39
> To:    Andrzej Mazurkiewicz; 'pgsql-general@hub.org'
> Subject:    Re: [GENERAL] FW: inheritance of functions
> 
> hi...
> 
> > >  Postgres automatically allows the created table to inherit functions
> on
> > > tables above it in the inheritance hierarchy. 
> > > create table A (
> > > .
> > > .
> > > );
> > > 
> > > create function F ...
> > > 
> > > create table B (
> > > ..
> > > ) inherits (A);
> > > 
> > > Now I assume that I can somehow use function F on table B 
> 
> you would be able to use function F on table B even if it didn't inherit
> A. 
> 
> however, if you construct rules, triggers, etc... on table A, these should
> be
> inherited by table B.
> 
> the manual is, as far as my experience has led me to believe, referring to
> functions "bound" (for lack of a better word) to the parent table....
> 
> -- 
> Aaron J. Seigo
> Sys Admin


pgsql-hackers by date:

Previous
From: "Gene Sokolov"
Date:
Subject: Re: [HACKERS] file descriptors leak?
Next
From: Hannu Krosing
Date:
Subject: A bug in NOT IN (SELECT ...