On 2/16/23 2:38 PM, Alvaro Herrera wrote:
> On 2023-Feb-16, Jonathan S. Katz wrote:
>
>> On 2/16/23 12:53 PM, Alvaro Herrera wrote:
>
>>> I don't think this is the fault of logical replication. Consider that
>>> for the backend server, the function source code is just an opaque
>>> string that is given to the plpgsql engine to interpret. So there's no
>>> way for the logical DDL replication engine to turn this into runnable
>>> code if the table name is not qualified.
>>
>> Sure, that's fair. That said, the example above would fall under a "typical
>> use case", i.e. I'm replicating functions that call tables without schema
>> qualification. This is pretty common, and as logical replication becomes
>> used for more types of workloads (e.g. high availability), we'll definitely
>> see this.
>
> Hmm, I think you're saying that replay should turn check_function_bodies
> off, and I think I agree with that.
Yes, exactly. +1
The docs seem to think that is the correct approach too:
"Set this parameter to off before loading functions on behalf of other
users"[1].
[1]
https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-CHECK-FUNCTION-BODIES