PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

използвайте \set променлива вътре в блока за деклариране на plpgsql

Обяснението е, според ръководството :

Тялото на DO операторът е низ в доларови кавички. Така че няма интерполация вътре в низа.

Тъй като трябва да е буквален низ, вие също не можете да свързвате низове в движение. Ръководството:

Но можете да свържете низа и след това да го изпълните.

Удебелен акцент мой. Просто трябва да направите правилното цитиране:

test=# \set test 'some value'
test=# \set code 'DECLARE v_test text := ' :'test' '; BEGIN RAISE NOTICE ''test var is: %'', v_test; END'
test=# DO :'code';
NOTICE: test var is: some value
DO
test=#

Но бих предпочел да създам (временна) функция и да предам стойността като параметър (където работи psql интерполацията). Подробности в този свързан отговор на dba.SE:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. хибернация с c3p0:createClob() все още не е внедрен

  2. Symfony3 запазва всяка актуализация в база данни

  3. Не може да се инсталира plpython за postgres 12

  4. LibreOffice Calc изпълнява PostgreSQL функция

  5. Как да изпусна таблица въз основа на условието IF в postgre?