Re: Error with pg_dump (of data), with --role - Mailing list pgsql-general

From Rob Sargent
Subject Re: Error with pg_dump (of data), with --role
Date
Msg-id 296ae0e1-8f2c-fc11-d184-f98dba3d0cd5@gmail.com
Whole thread Raw
In response to Error with pg_dump (of data), with --role  (Ken Tanzer <ken.tanzer@gmail.com>)
Responses Re: Error with pg_dump (of data), with --role
List pgsql-general

On 2/18/21 6:18 PM, Ken Tanzer wrote:
> Hi.  I'm trying to do a data dump with pg_dump using RLS and --set-role, 
> but am getting an error, and I'm not understanding why. With this 
> command, run as postgres:
> 
> pg_dump -p 5433 -O --role=rcafe_TACOMA --enable-row-security 
> --column-inserts -a -f ~/ag_tacoma_data.pg_dump ag_rcafe
> 
> I get
> [Multiple notices about circular foreign keys, like this, which I don't 
> think are directly-relevant]
> NOTICE: there are circular foreign-key constraints among these tables:
> pg_dump:   tbl_client
> pg_dump:   tbl_l_veteran_status
> pg_dump:   tbl_staff
> pg_dump: You might not be able to restore the dump without using 
> --disable-triggers or temporarily dropping the constraints.
> pg_dump: Consider using a full dump instead of a --data-only dump to 
> avoid this problem.
> 
> But then crash out with:
> 
> pg_dump: [archiver (db)] query failed: ERROR:  function 
> has_segment_access(character varying, name) does not exist
> LINE 3: SELECT has_segment_access(segment,current_user);
>                 ^
> HINT:  No function matches the given name and argument types. You might 
> need to add explicit type casts.
> QUERY:
> 
> SELECT has_segment_access(segment,current_user);
> 
> CONTEXT:  SQL function "has_segment_access" during inlining
> pg_dump: [archiver (db)] query was: DECLARE _pg_dump_cursor CURSOR FOR 
> SELECT * FROM ONLY public.tbl_client
> 
> Which I don't get.  That function does exist, and is callable by both 
> postgres and the ag_TACOMA users.
> 
> ag_rcafe=# \df has_segment_access
>                                           List of functions
>   Schema |        Name        | Result data type |           Argument 
> data types           |  Type
> --------+--------------------+------------------+-----------------------------------------+--------
>   public | has_segment_access | boolean          | segment character 
> varying               | normal
>   public | has_segment_access | boolean          | segment character 
> varying, db_user name | normal
>   public | has_segment_access | boolean          | segments character 
> varying[]            | normal
> (3 rows)
> 
> ag_rcafe=# SELECT current_user,has_segment_access('TACOMA',current_user);
>   current_user | has_segment_access
> --------------+--------------------
>   postgres     | f
> (1 row)
> 
> ag_rcafe=# SET ROLE "rcafe_TACOMA";
> SET
> ag_rcafe=> SELECT current_user,has_segment_access('TACOMA',current_user);
>   current_user | has_segment_access
> --------------+--------------------
>   rcafe_TACOMA | t
> (1 row)
> 
> So if the error means what it says, I don't get why.  It would make more 
> sense to me if there were a restore, with an issue about how to sequence 
> the creation of things.  But since it's a dump, shouldn't everything 
> just be there?
> 
> Any help appreciated.  More info & context below.
> 
> Thanks.
> 
> Ken
> 
> version:  9.6.20
> This database is about 8 years old, and has been through one if not two 
> upgrades, which I mention to say who knows what weirdness or cruft (or 
> corruption?) might have crept in.
> 
> It's a multi-tenant DB using RLS so that each tenant can only see their 
> own data.  One of the tenants needs to have their data created in a 
> separate database.  My initial take on how to do this was to dump the 
> schema as postgres, and then dump the data as the particular user. 
> (ag_TACOMA).  But I haven't gotten very far with that. :)
> 
> There is only one schema, public.
> 
> 

I suspect it is because "set role" doesn't "set search_path"




pgsql-general by date:

Previous
From: Ken Tanzer
Date:
Subject: Error with pg_dump (of data), with --role
Next
From: Ken Tanzer
Date:
Subject: Re: Error with pg_dump (of data), with --role