DROP TABLE IF EXISTS ambiguous_table; CREATE TABLE ambiguous_table(which text); INSERT INTO ambiguous_table VALUES ('permanent'); CREATE OR REPLACE FUNCTION ss () RETURNS text LANGUAGE plpgsql AS $$ BEGIN RETURN which FROM ambiguous_table; END; $$; -- Returns 'permanent' SELECT ss(); -- Replace the table in 'public' schema with a temp table DROP TABLE ambiguous_table; CREATE TEMP TABLE ambiguous_table(which text); INSERT INTO ambiguous_table VALUES ('temp'); -- Should return 'temp', but fails if pg_temp wasn't initialized -- before executing the function the first time. SELECT ss();