Hi all,

I was trying to mock a function. So I followed the instructions in this
<https://www.postgresql.org/message-id/0E379B0D-EEFA-45FB-AC60-23F760B8D338%40justatheory.com>
 thread.

I created a function with the same name as the existing one in different
schema, and I updated the search path adding that schema at the beginning.

This solution worked with a real schema, but it did not with a temporary
one.

Code working with a real schema:

> SHOW SEARCH_PATH; -- public



CREATE OR REPLACE FUNCTION public.get_random_string()
> RETURNS TEXT LANGUAGE SQL AS $$
> SELECT 'real'::text;
> $$;

SELECT get_random_string(); -- real



CREATE SCHEMA mock;
> CREATE OR REPLACE FUNCTION mock.get_random_string()
> RETURNS TEXT LANGUAGE SQL AS $$
> SELECT 'mock'::text;
> $$;

SELECT get_random_string(); -- real



SET SEARCH_PATH = mock, public;
> SELECT get_random_string(); -- mock


Code not working with a temporary schema:

> SHOW SEARCH_PATH; -- public



CREATE OR REPLACE FUNCTION public.get_random_string()
> RETURNS TEXT LANGUAGE SQL AS $$
> SELECT 'real'::text;
> $$;
> SELECT get_random_string(); -- real



SELECT nspname FROM pg_namespace WHERE oid = pg_my_temp_schema(); --
> pg_temp_12



CREATE OR REPLACE FUNCTION pg_temp_12.get_random_string()
> RETURNS TEXT LANGUAGE SQL AS $$
> SELECT 'mock'::text;
> $$;
> SELECT get_random_string(); -- real



SET SEARCH_PATH = pg_temp_12, public;
> SELECT get_random_string(); -- real


Is there any way to make this work?

Thanks,
Jose

Reply via email to