Обсуждение: How to determine table schema in trigger function
I created generic (for tables in different schemas) trigger function : CREATE OR REPLACE FUNCTION setlastchange() RETURNS "trigger" AS $$BEGIN UPDATE serverti SET lastchange='now' WHERE tablename=TG_RELNAME and schemaname=TG_SCHEMA; RETURN NULL; END$$ LANGUAGE plpgsql STRICT; Unfortunately, this does not work since TG_SCHEMA is not valid in PL/pgSQL How to determine schema name where table TG_RELNAME belongs in trigger function ? Andrus. table structure is: CREATE TABLE serverti ( schemaname CHARACTER(7), tablename CHARACTER(8) , lastchange timestamp, primary key (schemaname, tablename) );
On Thu, Aug 18, 2005 at 05:02:58PM +0300, Andrus wrote: > How to determine schema name where table TG_RELNAME belongs in trigger > function ? You could use TG_RELID to query the system catalogs. See the documentation for pg_class and pg_namespace. -- Michael Fuhr
On Thu, 2005-08-18 at 17:02 +0300, Andrus wrote:
> I created generic (for tables in different schemas) trigger function :
>
> CREATE OR REPLACE FUNCTION setlastchange() RETURNS "trigger"
> AS $$BEGIN
> UPDATE serverti SET lastchange='now' WHERE tablename=TG_RELNAME and
> schemaname=TG_SCHEMA;
> RETURN NULL;
> END$$ LANGUAGE plpgsql STRICT;
>
>
> Unfortunately, this does not work since TG_SCHEMA is not valid in PL/pgSQL
>
> How to determine schema name where table TG_RELNAME belongs in trigger
> function ?
How about extracting relnamespace from pg_catalog.pg_class?
UPDATE serverti SET lastchange='now'
WHERE tablename=TG_RELNAME and schemaname=(
SELECT n.nspname
FROM pg_catalog.pg_namespace AS n,
pg_catalog.pg_class AS c
WHERE c.relnamespace = n.oid AND
c.oid = TG_RELID
);