Mandalina
Mandalina

Reputation: 446

ppgsql declaring variable from parameter

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 ":"

Upvotes: 0

Views: 39

Answers (1)

Pavel Stehule
Pavel Stehule

Reputation: 45760

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.

Upvotes: 3

Related Questions