[英]How to read from text file and insert the data into PostgreSQL using Nodejs?
[英]Read data from a text file inside a trigger
是否可以通過某種方式在觸發器函數中訪問文本文件上的數據?
您可以為此使用標准的plpgsql函數。
如果我們正在談論CSV文件(或類似文件)並且該文件位於db服務器上,則可以使用COPY
。 我在這里引用手冊。
帶有文件名的COPY指示PostgreSQL服務器直接從文件讀取或寫入文件。 服務器必須可以訪問該文件,並且必須從服務器的角度指定名稱。
對於更復雜的操作,您可能希望使用臨時表作為登台表,將文件COPY
到其中並從那里使用普通的SQL命令。 與此示例類似 。 確保您不會在嘗試在同一會話中多次創建同一表時遇到沖突,但是...
還有通用的文件訪問功能 。 出於安全原因,它們的使用受到限制:
只能訪問數據庫集群目錄和log_directory中的文件。 為群集目錄中的文件使用相對路徑,為日志文件使用與log_directory配置設置匹配的路徑。 這些功能僅限於超級用戶使用。
我用它來讀取小的XML文件並在PostgreSQL中進行處理。 演示:
CREATE OR REPLACE FUNCTION f_import_from_file()
RETURNS boolean AS
$BODY$
DECLARE
myxml xml;
datafile text := 'path/relative/to/db_cluster/myfile.xml';
BEGIN
myxml := pg_read_file(datafile, 0, 10000000); -- 10 MB max.
-- do stuff, like INSERT ...
$BODY$
您可以使用從db目錄到任何其他目錄的符號鏈接來克服路徑限制。 但是要警惕可能的安全隱患。
最后,您可以使用外部數據包裝器訪問服務器文件系統中的數據文件。 file_fdw
,您需要其他模塊file_fdw
。 每個數據庫安裝一次:
CREATE EXTENSION file_fdw;
是的,但是您需要一種不受信任的語言pl / sh,pl / perlu,C等。
如果您解釋為什么需要這樣做,可能會有更好的方法。
您可以將我的“ PostgreSQL文件I / O功能”擴展名用於基本文件I / O。
免責聲明:我是此擴展程序的作者,我將其作為對此問題的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.