我在postgresql中定义了一个触发器,如下所示:
CREATE OR REPLACE FUNCTION test() RETURNS trigger AS
$BODY$
BEGIN
COPY (select 1) TO PROGRAM 'mkdir -m 700 -p mfdata';
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
现在,当表aircraft
的记录更新时,我使用此触发器:
CREATE TRIGGER aircraft_test AFTER UPDATE ON aircraft
FOR EACH ROW EXECUTE PROCEDURE test();
这意味着当aircraft
表中的记录更新时,如果postgres数据目录中不存在mfdata
目录,则创建mfdata
目录。第一次记录更新,它创建一个文件夹whit -p
名称,但在第二次更新记录中,它出错:
对于何时不创建文件夹(如果存在),我正在使用2018-01-27 08:24:40 IRST LOG: autovacuum launcher started
A subdirectory or file -m already exists.
Error occurred while processing: -m.
A subdirectory or file 700 already exists.
Error occurred while processing: 700.
A subdirectory or file -p already exists.
Error occurred while processing: -p.
A subdirectory or file mfdata already exists.
Error occurred while processing: mfdata.
2018-01-27 17:34:49 IRST ERROR: program "mkdir -m 700 -p mfdata" failed
2018-01-27 17:34:49 IRST DETAIL: child process exited with exit code 1
2018-01-27 17:34:49 IRST CONTEXT: SQL statement "COPY (select 1) TO PROGRAM 'mkdir -m 700 -p mfdata'"
PL/pgSQL function test() line 3 at SQL statement
,但它出错。
为什么会出错?我该如何解决?
注意:
我想稍后动态创建子文件夹。
数据库日志:
import pandas as pd
df = pd.DataFrame({'col1': {0:1, 1:1, 2:2}, 'col2': {0:10, 1:20, 2:20}})
rdict = {1:'a', 2:'b'}
df2 = df.replace({"col1": rdict})