PostgreSQL не может получить параметр - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь создать функцию, которая, если true, сгенерирует первый запрос, а в случае сбоя запустит запрос else.

CREATE OR REPLACE FUNCTION update_mig_status(schemaname text,table_name 
text,fulltable text)
RETURNS VOID as $body$
DECLARE 
    passed boolean;

begin
  SELECT EXISTS (
   SELECT 1 
   FROM   pg_catalog.pg_class c
   JOIN   pg_catalog.pg_namespace n ON n.oid = c.relnamespace
   WHERE  n.nspname = $1
   AND    c.relname = $2
   AND    c.relkind = 'r'    -- only tables
 ) into passed;

IF passed = 't' THEN
    UPDATE dwh.table_list_2018 SET
    move_data_to_dca = 'V',
    row_count = (select count(1) from $1.$2),
    table_size = (SELECT 
    sum (table_size_byte)/1024/1024/1024 GB 
    FROM dba.hist_tbl_size_1_prt_m_201804 
    WHERE schema_name=$1 and table_name = $2
    and collect_date='2018-04-25')
    WHERE move_data_to_dca = 'P' and schema = $1 and table_name = $2;
ELSE
    UPDATE dwh.table_list_2018 SET 
    move_data_to_dca = 'V',
    purge_table = 'Y'
    WHERE move_data_to_dca = 'P' and schema = $1 and table_name = $2;
END IF;
END;
$body$
LANGUAGE plpgsql;

проблема в этой строке

row_count = (select count(1) from $1.$2)

выдает эту ошибку

ERROR:  syntax error at or near "$1"
LINE 1: ..._to_dca = 'V', row_count = (select count(1) from  $1 . $2 ),...

RROR: syntax error at or near "$1"
SQL state: 42601
Context: SQL statement in PL/PgSQL function "update_mig_status" near line 23

кажется, что строка не интерполирована. это сработало хорошо, если бы я вторгся в это

row_count = (select count(1) from schema.table_name)

обратите внимание, что я использую postgresql 8.4

спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...