我有这个函数返回一组记录,我需要将这些记录保存到表中。我必须每天做一百次。
我最初的方法只是清除表中的数据并再次重新插入所有记录。
-- CLEAR MY TABLE
DELETE FROM MY_TABLE;
-- POPULATE MY TABLE WITH MY FUNCTION'S RESULT
INSERT INTO MY_TABLE (COLUMN1, COLUMN2, COLUMN3)
SELECT COLUMN1, COLUMN2, COLUMN3
FROM MY_FUNCTION(PARAM1, PARAM2, PARAM3);
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。但是我的表有很多触发器,当函数返回数千条记录时,这种方法效率很低。
然后,我转向了这种方法:
-- CREATE A TEMPORARY TABLE
CREATE GLOBAL TEMPORARY TABLE MY_TEMP_TABLE
(COLUMN1 TEXT, COLUMN2 TEXT, COLUMN3 TEXT);
-- POPULATE MY TEMP TABLE WITH MY FUNCTION'S RESULT
INSERT INTO MY_TEMP_TABLE (COLUMN1, COLUMN2, COLUMN3)
SELECT COLUMN1, COLUMN2, COLUMN3
FROM MY_FUNCTION(PARAM1, PARAM2, PARAM3);
-- CREATE AN INDEX FOR HELP PERFORMANCE
CREATE …
Run Code Online (Sandbox Code Playgroud) postgresql performance best-practices postgresql-performance