Sql postgres-将变量传递给not like运算符
我们有带有日期字段的表名,如表名、表年、表月、表日。我们想使用过程分析两天以上的表,并得出以下过程。 但看起来带not like表达式的select命令并没有拾取两天以上的表,而是拾取所有表。 我做错了什么。请建议Sql postgres-将变量传递给not like运算符,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我们有带有日期字段的表名,如表名、表年、表月、表日。我们想使用过程分析两天以上的表,并得出以下过程。 但看起来带not like表达式的select命令并没有拾取两天以上的表,而是拾取所有表。 我做错了什么。请建议 DO $$ DECLARE tab RECORD; schemaNa VARCHAR := 'test'; _now_date varchar := TO_CHAR((NOW()-2) :: DATE, 'yyyy_mm_dd') ; BEGIN for tab in
DO $$
DECLARE
tab RECORD;
schemaNa VARCHAR := 'test';
_now_date varchar := TO_CHAR((NOW()-2) :: DATE, 'yyyy_mm_dd') ;
BEGIN
for tab in (select relname AS table_name from pg_stat_user_tables where schemaname='test' and relname not like '%_now_date%' order by 1)
LOOP
RAISE NOTICE 'ANALYZE %1.%2', schemaNa, tab.table_name;
RAISE NOTICE '%',_now_date;
EXECUTE 'ANALYZE '||schemaNa||'.'||tab.table_name;
end loop;
end
$$;
不要将变量名括在单引号中。生成动态SQL时,最好使用
format()
DO $$
DECLARE
tab RECORD;
l_schema VARCHAR := 'test';
l_sql text;
_now_date varchar := TO_CHAR(current_date - 2, 'yyyy_mm_dd');
BEGIN
for tab in (select relname AS table_name
from pg_stat_user_tables
where schemaname = l_schema
and relname not like '%'||_now_date||'%'
order by 1)
LOOP
l_sql := format('ANALYZE %I.%I', l_schema, tab.table_name);
RAISE NOTICE '%', l_sql;
RAISE NOTICE '%',_now_date;
EXECUTE l_sql;
end loop;
end
$$;