PostgreSQL存储路径以供脚本参考

时间:2010-05-21 16:24:07

标签: postgresql plpgsql

我正在尝试在PostgreSQL中找到存储系统路径的合适位置。

我要做的是使用COPY命令将值加载到表中。但是,由于我将定期引用相同的文件路径,因此我希望将该路径存储在一个位置。我已经尝试创建一个函数来返回相应的路径,但是当我在COPY命令中调用该函数时出现语法错误。我不确定这是否是正确的方法,但无论如何我都会发布我的代码。

COPY命令:

COPY employee_scheduler.countries (code, name)
    FROM get_csv_path('countries.csv')
    WITH CSV;

功能定义:

CREATE OR REPLACE FUNCTION
    employee_scheduler.get_csv_path(IN file_name VARCHAR(50))
    RETURNS VARCHAR(250) AS $$
DECLARE
    path VARCHAR(200) := E'C:\\Brian\\Work\\employee_scheduler\\database\\csv\\';
    file_path VARCHAR(250) := '';
BEGIN
   file_path := path || file_name;
   RETURN file_path;
END;
$$ LANGUAGE plpgsql;

如果有人对如何做到这一点有不同的想法,我愿意接受建议。

更新:

我收到的错误是:

错误:“employee_scheduler”或附近的语法错误 第12行:FROM employee_scheduler.get_csv_path('countries.csv')

我尝试了以下陈述但没有运气:

COPY employee_scheduler.countries (code, name)
    FROM employee_scheduler.get_csv_path('countries.csv')
    WITH CSV;

COPY employee_scheduler.countries (code, name)
    FROM (employee_scheduler.get_csv_path('countries.csv'))
    WITH CSV;

COPY employee_scheduler.countries (code, name)
    FROM (SELECT * FROM employee_scheduler.get_csv_path('countries.csv'))
    WITH CSV;

我开始认为我试图实现这一目标的方式是不可能的。有没有其他人对如何实现这一点有任何想法?如果我想使用复制语句,我可能只需要在任何地方硬编码路径......

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这不是正确的方法。在复制命令中调用函数不会有帮助。

创建一个如下所示的函数a,使其可行: 创建或替换功能copy_data(文本文本)返回int 如 $$ 宣布 cmd文字; 开始 cmd:='copy test_copy from'||''''|| get_csv(filename)||''''||' with delimiter'||''''||','||''''||';'; 执行cmd 返回1; 结束; $$ language plpgsql;

答案 1 :(得分:0)

您的功能正常。但是,您需要说employee_scheduler.get_csv_path('countries.csv')而不是get_csv_path('countries.csv')(除非我弄错了)。在psql中尝试这个并确保它有效:

=> SELECT employee_scheduler.get_csv_path('countries.csv');
                        get_csv_path                         
-------------------------------------------------------------
 C:\Brian\Work\employee_scheduler\database\csv\countries.csv
(1 row)