哪里有NOTICE或错误消息?

时间:2018-02-22 21:57:42

标签: postgresql copy plpgsql

否注意

上没有错误消息
CREATE or replace FUNCTION copy_to_csv(
  fname text,
  query text,
  header boolean DEFAULT true,
  quotedfields text[] DEFAULT NULL,
  usedate boolean DEFAULT true
) RETURNS text AS $f$
DECLARE
  aux text :='';
BEGIN
  RAISE NOTICE 'HELLO!!!!!';
  IF p_quotedfields IS NOT NULL THEN
    aux := ', FORCE_QUOTE('|| array_to_string(quote_ident(quotedfields),',') ||')';
  END IF;
  aux := format(
    'COPY (%L) TO (%L) WITH (FORMAT CSV, HEADER %L%s)',
    query,
    CASE WHEN usedate THEN fname|| now()::date::text ELSE fname END ||'.csv',
    header,
    aux
  );
  RAISE NOTICE 'HELLO2';
  EXECUTE aux;
  RAISE NOTICE 'HELLO3';
  RETURN aux;
END;
$f$ LANGUAGE plpgsql STRICT;

...使用select copy_to_csv(E'select * from t', '/tmp/t');致电。在UBUNTU 16 LTS使用PostgreSQL v10。

但是这个功能正常运行:

CREATE or replace FUNCTION test1() RETURNS void AS $f$
BEGIN
  RAISE NOTICE 'HELLO!!!';
END;
$f$ LANGUAGE plpgsql STRICT;

PS:quote_ident()重载也正常工作,用

实现
CREATE FUNCTION quote_ident(text[]) RETURNS text[] AS $f$
  SELECT array_agg(quote_ident(x)) FROM unnest($1) t(x)
$f$ LANGUAGE SQL IMMUTABLE;

1 个答案:

答案 0 :(得分:2)

当函数为NULL且其中一个参数为NULL时,函数体不会执行,结果为STRICT。从函数定义中删除{{1}}。

是的,你错了了论点的顺序。