-1
我是PostgreSQL
的全新產品,我需要有人指向我 正確的方向如何將函數的結果寫入文本 文件。是否可以在PostgreSQL PL/pgSQL
語言中執行此操作?我之前在Oracle
中使用UTL_FILE
命令 完成了此操作,我希望PostgreSQL
具有類似的功能。預先感謝您提供的任何幫助。Postgresql中的I/O文件操作
請提供一些文件操作的例子。
CREATE OR REPLACE FUNCTION NP_AC015_FETCH.proc_log (P_MSG text, P_MODE integer default 1) RETURNS VOID AS $body$
DECLARE
V_F_IS_OPEN boolean; --IF LOG FILE IS ALREADY OPEN THIS IS SET TO TRUE
V_LOG_MSG varchar(32767); --LOG FILE NAME
V_LOG_DIR varchar(30) := 'ND_GANJIS_LOG_DIR'; --LOG DIRECOTY
vTemp UTL_FILE.FILE_TYPE;
BEGIN
select get_var('GM_LOG_FILE') INTO vTemp;
V_F_IS_OPEN := utl_file.is_open(vTemp);
if not V_F_IS_OPEN then
-- Log File Open
-- 32767 IS THE MAXIMUM NUMBER OF CHARACTERS PER LINE, INCLUDING THE NEWLINE CHARACTER, FOR THIS FILE.
vTemp := UTL_FILE.FOPEN(V_LOG_DIR, 'NIA_PLSQL_'||to_char(clock_timestamp(), 'yyyymmdd')||'.log', 'A', 32767);
end if;
-- LOG MSG TO BE WRITTEN TO THE LOG FILE
V_LOG_MSG := TO_CHAR(CURRENT_TIMESTAMP, 'yyyy/mm/dd hh24:mi:ss:ff3') ||' '|| P_MSG;
--Output messages to a file
UTL_FILE.PUT_LINE(vTemp, V_LOG_MSG);
--Closing Log File
if P_MODE = current_setting('NP_AC015_FETCH.PV_LOG_CLOSE_MODE')::pls_integer and utl_file.is_open(vTemp) then
utl_file.fclose(vTemp);
end if;
--HERE THE EXCEPTION PART IS NOT INCLUDED,
--Reason: PROGRAM WILL GO ON INFINITE LOOP IF SOME ERROR OCCURS HERE, BECAUSE, EACH EXCEPTION WRITES INTO
--LOG FILE, USING THIS PROCEDURE.
exception
when others then
RAISE EXCEPTION '%', dbms_utility.format_error_backtrace||chr(10)||dbms_utility.format_error_stack||chr(10)||dbms_utility.format_call_stack, true;
END;
$body$
LANGUAGE PLPGSQL;
您可能想查找外部數據包裝器。 PostgreSQL中沒有類似於UTL_FILE的東西。 https://wiki.postgresql.org/wiki/Foreign_data_wrappers#File_Wrappers – Jayadevan
@Jayadevan ...感謝您的回覆。您能否請您舉例說明如何使用FDW將數據導出到文本文件? – User0123
看起來像FDW是隻讀的。這樣做的答案是否符合您的需求? http://stackoverflow.com/questions/4897085/dynamically-generated-table-name-in-postgresql-copy-command我測試了一個稍微修改過的代碼版本,它工作。下面是代碼創建或替換功能dynamiccopy(表名的文本,文本outname)返回void作爲 $ $身體開始 執行 格式( '複製(SELECT * FROM%S)爲 '' /tmp/%s.csv'」 ',tablename,outname); 結束 $ body $語言plpgsql; – Jayadevan