I am running a sql query from the command line where I pass in value called tablename:
psql "hostname" -v tablename=$1 -a -q -f "filename.sql"
I then set the variable like this:
\set tablename :tablename
And then I have a function where I want to use the variable tablename like this:
DO $$
BEGIN
if (tablename = 'movie_table') then
-- query goes in here
END if;
END;
$$;
I have also tried declaring the variable with a few variations of this:
DECLARE tablename varchar := :tablename;
Please let me know if you have any suggestions. I get the following error:
syntax error at or near ":"
Your code cannot to work, because you try to read client side variables (psql) on server side (plpgsql). You need to push the value to custom server side variable, and in next step you can read it from plpgsql environment:
postgres=# \set client_side_var Ahoj
postgres=# select set_config('my.client_side_var', :'client_side_var', false);
┌────────────┐
│ set_config │
╞════════════╡
│ Ahoj │
└────────────┘
(1 row)
postgres=# do $$
declare var text default current_setting('my.client_side_var');
begin
raise notice '>>>%<<<', var;
end;
$$;
NOTICE: >>>Ahoj<<<
DO
You cannot to use a psql syntax :var
inside plpgsql code.