Here's a reproducible test case that causes the problem in different schemas. The issue appears to be related to creating a table and a function that has the same name as the table with a prepended underscore.
rumpi_test -- table name _rumpi_test -- function name Here's the test case; SELECT version(); drop table if exists rumpi_test; create table rumpi_test( col1 varchar, col2 varchar); drop function if exists rumpi_test; CREATE OR REPLACE FUNCTION _rumpi_test( col1 varchar) RETURNS varchar LANGUAGE plpgsql AS $function$ declare begin raise info '%',_col1::varchar; return('Done'); end; $function$; select _rumpi_test('hello'); Here what I get when I run this in psql: xxx_pub_dev_2_db=> SELECT version(); version --------------------------------------------------------------------------------------------------------- PostgreSQL 16.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-26), 64-bit (1 row) xxx_pub_dev_2_db=> xxx_pub_dev_2_db=> drop table if exists rumpi_test; DROP TABLE xxx_pub_dev_2_db=> xxx_pub_dev_2_db=> create table rumpi_test( col1 varchar, col2 varchar); CREATE TABLE xxx_pub_dev_2_db=> xxx_pub_dev_2_db=> xxx_pub_dev_2_db=> xxx_pub_dev_2_db=> drop function if exists rumpi_test; NOTICE: function rumpi_test() does not exist, skipping DROP FUNCTION xxx_pub_dev_2_db=> xxx_pub_dev_2_db=> CREATE OR REPLACE FUNCTION _rumpi_test( col1 varchar) xxx_pub_dev_2_db-> xxx_pub_dev_2_db-> RETURNS varchar xxx_pub_dev_2_db-> xxx_pub_dev_2_db-> LANGUAGE plpgsql xxx_pub_dev_2_db-> xxx_pub_dev_2_db-> AS xxx_pub_dev_2_db-> xxx_pub_dev_2_db-> $function$ xxx_pub_dev_2_db$> xxx_pub_dev_2_db$> declare xxx_pub_dev_2_db$> xxx_pub_dev_2_db$> begin xxx_pub_dev_2_db$> xxx_pub_dev_2_db$> raise info '%',_col1::varchar; xxx_pub_dev_2_db$> xxx_pub_dev_2_db$> return('Done'); xxx_pub_dev_2_db$> xxx_pub_dev_2_db$> end; xxx_pub_dev_2_db$> xxx_pub_dev_2_db$> $function$; CREATE FUNCTION xxx_pub_dev_2_db=> xxx_pub_dev_2_db=> xxx_pub_dev_2_db=> xxx_pub_dev_2_db=> select _rumpi_test('hello'); ERROR: malformed array literal: "hello" LINE 1: select _rumpi_test('hello'); ^ DETAIL: Array value must start with "{" or dimension information. xxx_pub_dev_2_db=> On Wed, Aug 6, 2025 at 4:43 PM David G. Johnston <david.g.johns...@gmail.com> wrote: > On Wednesday, August 6, 2025, Rumpi Gravenstein <rgrav...@gmail.com> > wrote: > >> >> xxx_pub_dev_2_db=# drop FUNCTION if exists _sa_setup_role; >> DROP FUNCTION >> xxx_pub_dev_2_db=# select proname, pronamespace, oid from pg_proc where >> proname like '%sa_setup%'; >> proname | pronamespace | oid >> ---------+--------------+----- >> (0 rows) >> >> xxx_pub_dev_2_db=# select _sa_setup_role('af_repo_app'); >> ERROR: malformed array literal: "af_repo_app" >> LINE 1: select _sa_setup_role('af_repo_app'); >> ^ >> DETAIL: Array value must start with "{" or dimension information. >> xxx_pub_dev_2_db=# >> > > Yeah, we’ve already pretty much decided this function has nothing to do > with it. Go look at pg_type per the last example demonstrating the same > error without the involvement of any user-defined function. > > David J. > > -- Rumpi Gravenstein