我在Windows 2012 R2上运行64位Postgres 10.3。每周我们都会在文本文件(44个单独的文件)中获取数据,并在PL / pgSQL函数中使用LOOP和COPY命令来导入数据。我解决了在解压缩数据时提供了错误密码的问题,因此源文件已创建但为空。导入功能似乎正在运行,但每次尝试时都会冻结在不同的文件中。
在尝试使用COPY之前,有没有办法(使用PL / pgSQL)检测磁盘上的文件是否为空?
答案 0 :(得分:0)
您可以使用此功能。类似的东西:
CREATE OR REPLACE FUNCTION wwusp_filesize(file_path text)
RETURNS TEXT AS $BODY$
BEGIN
DROP TABLE IF EXISTS tmp_file_size;
CREATE TEMPORARY TABLE tmp_file_size (size BIGINT);
EXECUTE 'COPY tmp_file_size (size) FROM PROGRAM ''wc -c < ' || file_path || '''';
RETURN (SELECT pg_size_pretty(size) FROM tmp_file_size);
END;
$BODY$ LANGUAGE plpgsql;
这适用于Linux服务器。如果您希望在Windows上也能使用它,只需将wc -c < file
替换为相应的程序/语法。
# SELECT wwusp_filesize('/etc/postgresql/9.5/main/pg_hba.conf') AS filesize;
filesize
------------
4641 bytes
(1 row)
使用空文件..
# SELECT wwusp_filesize('/etc/postgresql/9.5/main/empty_file') AS filesize;
filesize
----------
0 bytes
(1 row)