小编Chr*_*ian的帖子

从 Postgres 9.x 中的复杂查询插入/更新/删除表记录的有效方法

我有这个函数返回一组记录,我需要将这些记录保存到表中。我必须每天做一百次。

我最初的方法只是清除表中的数据并再次重新插入所有记录。

-- 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

6
推荐指数
1
解决办法
2万
查看次数