如何在execute psql中包含/ copy命令?

时间:2019-03-26 13:18:22

标签: postgresql csv copy psql execute

我想在psql中创建一个函数,以使用csv表中的新值更新my_table。这是我的代码:

CREATE OR REPLACE FUNCTION update_my_table(file_path text, new_value text)
RETURNS void
LANGUAGE plpgsql
AS $func$
DECLARE sql text;
BEGIN

  EXECUTE format($$ALTER TABLE my_table ALTER COLUMN some_column SET DEFAULT '%s';$$, new_value);

  SELECT format($$\copy my_table(%s) FROM '%s' delimiter E'|' csv header;$$
        , string_agg(quote_ident(attname), ', '), file_path)

  INTO sql
  FROM   pg_attribute
  WHERE attrelid = 'my_table'::regclass
      AND attname != 'some_column'
      AND NOT attname LIKE '%.....%' 
      AND attnum > 0;
  EXECUTE sql;

  ALTER TABLE my_table ALTER COLUMN some_column DROP DEFAULT;

END;
$func$;

我面临的问题是,如果我在...SELECT format($$\copy my_table(%s)...中使用'/ copy',则会在'\'附近收到语法错误。 但是,如果我不使用\copy而是使用copy,则file_path会出现错误,表示该文件不存在。 有解决此问题的方法吗?看来我选择的任何选项都行不通。

我很确定我必须使用/copy来打开文件,但是如何通过语法错误得到提示?

0 个答案:

没有答案