public inbox for [email protected]  
help / color / mirror / Atom feed
From: Adrian Klaver <[email protected]>
To: Thiemo Kellner <[email protected]>
To: [email protected] <[email protected]>
Subject: Re: [Code: 0, SQL State: 0A000] when "typing" from pg_catalog
Date: Tue, 9 Apr 2024 08:09:02 -0700
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>

On 4/9/24 07:59, Thiemo Kellner wrote:
> Hi
> 
> I have the following function code. When trying to install, it gives me
> 
> [Code: 0, SQL State: 0A000]  FEHLER: Verweise auf andere Datenbanken 
> sind nicht implementiert: pg_catalog.pg_roles.rolname
>    Position: 298  [Script position: 334 - 361]

[Code: 0, SQL State: 0A000] ERROR: References to other databases are not 
implemented: pg_catalog.pg_roles.rolname
    Position: 298 [Script position: 334 - 361]
> 
> To the best of my knowledge, pg_catalog is a schema not a database, like 
> information_schema. Am I missing something? And why is it not allowed to 
> type from the catalogue?
> 
> I presume, this example is rather academic due to the name type.

PG_CATALOG.PG_ROLES.ROLNAME := 'snowrunner_reader';

Is being seen as DB_NAME.TABLE_NAME.COLUMN_NAME.
> 

> Kind regards
> 
> Thiemo
> 
> 
> create or replace function GRANT_SELECTS()
> returns void
> language plpgsql
> as
> $body$
>      declare
>          C_SCHEMA_NAME       constant 
> INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME%type :=
>            'snowrunner';
> --        C_ROLE_NAME         constant    name :=
>          C_ROLE_NAME         constant    PG_CATALOG.PG_ROLES.ROLNAME :=
>            'snowrunner_reader';
>          V_SQL_STATEMENT                 text;
>      begin
>          -- Check the existance of the schema
>          perform 1
>              from INFORMATION_SCHEMA.SCHEMATA
>              where SCHEMA_NAME = C_SCHEMA_NAME;
>          if not found then
>              raise exception 'Schema "%s" does not exist!', C_SCHEMA_NAME;
>          end if;
> 
>          -- Check the existance of the role
>          perform 1
>              from PG_CATALOG.PG_ROLES
>              where ROLNAME = C_ROLE_NAME;
>          if not found then
>              raise exception 'Role "%s" does not exist!', C_ROLE_NAME;
>          end if;
> 
>          -- Issue grants
>          V_SQL_STATEMENT := format('grant select on all tables in schema 
> %i to %i', C_SCHEMA_NAME, C_ROLE_NAME);
>          raise info '%', V_SQL_STATEMENT;
>          execute V_SQL_STATEMENT;
>          V_SQL_STATEMENT := format('grant select on all views in schema 
> %i to %i', C_SCHEMA_NAME, C_ROLE_NAME);
>          raise info '%', V_SQL_STATEMENT;
>          execute V_SQL_STATEMENT;
>          V_SQL_STATEMENT := format('grant select on all materialized 
> views in schema %i to %i', C_SCHEMA_NAME, C_ROLE_NAME);
>          raise info '%', V_SQL_STATEMENT;
>          execute V_SQL_STATEMENT;
>          commit;
> 
>          return;
>      end;
> $body$;
> 
> 

-- 
Adrian Klaver
[email protected]







view thread (7+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: [Code: 0, SQL State: 0A000] when "typing" from pg_catalog
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox