Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:更新。。。关于缺少的插入?_Sql_Performance_Postgresql_Upsert - Fatal编程技术网

PostgreSQL:更新。。。关于缺少的插入?

PostgreSQL:更新。。。关于缺少的插入?,sql,performance,postgresql,upsert,Sql,Performance,Postgresql,Upsert,PostgreSQL已插入。。。关于冲突更新构造,但在我的查询中,在大多数情况下,我需要更新 所以我不希望DB尝试插入然后更新,我希望它尝试更新,如果记录不存在-将插入 可能吗? 它会提高性能吗?它会提高性能,这还取决于您将使用的代码。如果您构造一个表,然后使用一个单独的函数来检查它是否包含要添加的数据或否,然后执行相应的操作(如果存在)-插入else no。在这种情况下,您的代码占用部分内存。当处理大量数据时,这种方法很好,甚至可以节省内存的一小部分 INSERT INTO hundred(n

PostgreSQL已插入。。。关于冲突更新构造,但在我的查询中,在大多数情况下,我需要更新

所以我不希望DB尝试插入然后更新,我希望它尝试更新,如果记录不存在-将插入

可能吗?
它会提高性能吗?

它会提高性能,这还取决于您将使用的代码。如果您构造一个表,然后使用一个单独的函数来检查它是否包含要添加的数据或否,然后执行相应的操作(如果存在)-插入else no。在这种情况下,您的代码占用部分内存。当处理大量数据时,这种方法很好,甚至可以节省内存的一小部分

INSERT INTO hundred(name, name_slug, status) 
SELECT DISTINCT name, name_slug, status 
FROM hundred 
WHERE NOT EXISTS ( 
 SELECT 'X' 
 FROM temp_data 
 WHERE temp_data.name = hundred.name AND temp_data.name_slug = hundred.name_slug  AND temp_data.status = status );
为了简化,where语句是实现所需的关键点:

   INSERT INTO table (id, field, field2)
   SELECT 3, 'C', 'Z'
   WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);

您希望从中获得什么?我希望性能得到提高,因为我将尝试第一次更新,这在我的情况下更可能成功。您可以进行更新,如果行数为零,则插入。。关于冲突更新。将这些方法与实际数据进行比较,以检查速度是否更快。我需要在单个语句中执行此操作,是否可能?我可以使用单个SQL语句执行此操作,而不使用函数吗?是的,当然。您可以在插入where语句时执行此操作。试着举个例子:这就是你的意思吗,@Pavel Bernshtam对不起,我看不出我在你的例子中更新了什么?我想首先尝试更新tableupdatetableid,field,field2 SET id=3,field='C',field2='Z',如果不存在,请从id=3的表中选择1;我的意思是,你可以使用'WHERE'stat-t来完成其余的工作。我知道,但是如果不成功,我如何在一条语句中更新,然后插入?