Thread

  1. [Code: 0, SQL State: 0A000] when "typing" from pg_catalog

    Thiemo Kellner <thiemo@gelassene-pferde.biz> — 2024-04-09T14:59:38Z

    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]
    
    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.
    
    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$;
    
    
    
    
  2. Re: [Code: 0, SQL State: 0A000] when "typing" from pg_catalog

    Adrian Klaver <adrian.klaver@aklaver.com> — 2024-04-09T15:09:02Z

    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
    adrian.klaver@aklaver.com
    
    
    
    
    
  3. Re: [Code: 0, SQL State: 0A000] when "typing" from pg_catalog

    Thiemo Kellner <thiemo@gelassene-pferde.biz> — 2024-04-09T15:12:02Z

    Thanks for taking this up.
    
    Am 09.04.2024 um 17:09 schrieb Adrian Klaver:
    > On 4/9/24 07:59, Thiemo Kellner wrote:
    > [Code: 0, SQL State: 0A000] ERROR: References to other databases are not 
    > implemented: pg_catalog.pg_roles.rolname
    >     Position: 298 [Script position: 334 - 361]
    > 
    > PG_CATALOG.PG_ROLES.ROLNAME := 'snowrunner_reader';
    > 
    > Is being seen as DB_NAME.TABLE_NAME.COLUMN_NAME.
    
    Yes, obviously, but why? With the information_schema view all is fine. 
    And, I suppose, with all other objects in other schemas of the same 
    database too.
    
    
    
    
  4. Re: [Code: 0, SQL State: 0A000] when "typing" from pg_catalog

    Adrian Klaver <adrian.klaver@aklaver.com> — 2024-04-09T15:18:48Z

    On 4/9/24 08:12, Thiemo Kellner wrote:
    > Thanks for taking this up.
    > 
    > Am 09.04.2024 um 17:09 schrieb Adrian Klaver:
    >> On 4/9/24 07:59, Thiemo Kellner wrote:
    >> [Code: 0, SQL State: 0A000] ERROR: References to other databases are 
    >> not implemented: pg_catalog.pg_roles.rolname
    >>     Position: 298 [Script position: 334 - 361]
    >>
    >> PG_CATALOG.PG_ROLES.ROLNAME := 'snowrunner_reader';
    >>
    >> Is being seen as DB_NAME.TABLE_NAME.COLUMN_NAME.
    > 
    > Yes, obviously, but why? With the information_schema view all is fine. 
    > And, I suppose, with all other objects in other schemas of the same 
    > database too.
    
    Because you did not do?:
    
    PG_CATALOG.PG_ROLES.ROLNAME%type
    -- 
    Adrian Klaver
    adrian.klaver@aklaver.com
    
    
    
    
    
  5. Re: [Code: 0, SQL State: 0A000] when "typing" from pg_catalog

    Thiemo Kellner <thiemo@gelassene-pferde.biz> — 2024-04-09T16:48:44Z

    
    Am 09.04.2024 um 17:18 schrieb Adrian Klaver:
    > Because you did not do?:
    > 
    > PG_CATALOG.PG_ROLES.ROLNAME%type
    
    Oh, right. Sorry. What an oversight.
    
    
    
    
  6. Re: [Code: 0, SQL State: 0A000] when "typing" from pg_catalog

    Thiemo Kellner <thiemo@gelassene-pferde.biz> — 2024-04-09T16:49:25Z

    
    Am 09.04.2024 um 17:18 schrieb Adrian Klaver:
    
    > Because you did not do?:
    > 
    > PG_CATALOG.PG_ROLES.ROLNAME%type
    
    Thanks
    
    
    
    
  7. Re: [Code: 0, SQL State: 0A000] when "typing" from pg_catalog

    Tom Lane <tgl@sss.pgh.pa.us> — 2024-04-09T17:09:35Z

    Adrian Klaver <adrian.klaver@aklaver.com> writes:
    > On 4/9/24 08:12, Thiemo Kellner wrote:
    >>> PG_CATALOG.PG_ROLES.ROLNAME := 'snowrunner_reader';
    >>> 
    >>> Is being seen as DB_NAME.TABLE_NAME.COLUMN_NAME.
    
    No, it's being seen as DB_NAME.SCHEMA_NAME.TYPE_NAME.
    
    > Because you did not do?:
    > PG_CATALOG.PG_ROLES.ROLNAME%type
    
    Exactly.  The %type bit is important.
    
    			regards, tom lane