我可能在這裏扭曲postgres,但基本上,我想要做的是取一個字符串變量,並將它傳遞給一個sql命令(在這種情況下COPY)只使用psql。如何從postgresql中的plpgsql函數返回的SELECT查詢中提取字符串(或文本)?
所以這就是我想出的。這些命令被分成2個文件,因爲我希望能夠在其他情況下使用mydb_functions:
文件一:mydb_functions - 1.0.sql(在共享/擴展和mydb_functions.control也設置爲。手冊中給出一個文件名,返回完整的文件路徑,這是純粹做是爲了在下面add_data.sql的COPY語句,整潔
CREATE OR REPLACE FUNCTION fpn(filename text) RETURNS TEXT as '
DECLARE
mypath text := ''/path/to/my/directory/'';
BEGIN
RETURN mypath || filename;
END
' LANGUAGE plpgsql;
文件中的兩個:。add_data.sql這僅僅存在於數據複製到現有的注意:由於CREATE EXTENSION命令,需要以超級用戶權限運行psql。
CREATE EXTENSION IF NOT EXISTS mydb_functions;
-- haven't figured out how to create a function without arguments yet.
CREATE OR REPLACE FUNCTION test (dummyvar text) RETURNS text as '
DECLARE
filepath RECORD;
BEGIN
SELECT * INTO filepath from fpn(''mydatafile.data'');
COPY tablename (columnname) FROM filepath;
END
' LANGUAGE plpgsql;
我被卡住的部分是如何從文件路徑記錄中提取文本以在COPY命令中使用。任何提示,以更簡單的方式來實現這一點也是受歡迎的。我認爲創建一個表來存儲變量比這更容易。但我想完成最後一步。
三江源您詳細的答覆。我很欣賞你花費額外時間展示如何在pl函數中使用psql變量。 – karojosh