相关疑难解决方法(0)

如何使用Postgres中的CSV文件中的值更新选定的行?

我正在使用Postgres,并希望进行一个从CSV文件中获取的大更新查询,假设我得到了一张表(id, banana, apple).

我想运行一个更新香蕉而不是苹果的更新,每个新香蕉及其ID都将在CSV文件中.

我试着查看Postgres网站,但是这些例子正在扼杀我.

sql database csv postgresql file-io

64
推荐指数
1
解决办法
8万
查看次数

PostgreSQL:错误:运算符不存在:整数=字符变化

在这里,我尝试创建视图,如下所示:

例:

 create view view1
 as 
 select table1.col1,table2.col1,table3.col3
 from table1 
 inner join
 table2 
 inner join 
 table3
 on 
 table1.col4 = table2.col5 
 /* Here col4 of table1 is of "integer" type and col5 of table2 is of type "varchar" */
 /* ERROR: operator does not exist: integer = character varying */
 ....;
Run Code Online (Sandbox Code Playgroud)

注意:在sql server中执行相同的查询但在postgreSQL中遇到上述错误.

postgresql varchar integer casting

52
推荐指数
1
解决办法
13万
查看次数

PostgreSQL中的批量/批量更新/ upsert

我正在编写一个Django-ORM增强版,它尝试缓存模型并推迟模型保存直到事务结束.这几乎已经完成,但是我在SQL语法中遇到了意想不到的困难.

我不是一个DBA,但据我所知,数据库并不能真正有效地处理许多小问题.几个更大的查询要好得多.例如,最好使用大批量插入(比如一次100行)而不是100个单行.

现在,从我所看到的,SQL并没有真正提供任何语句来对表执行批量更新.这个词似乎令人困惑,我会解释我的意思.我有一个任意数据数组,每个条目描述一个表中的一行.我想更新表中的某些行,每个行都使用数组中相应条目的数据.这个想法非常类似于批量插入.

例如:我的表可以有两列"id""some_col".现在描述用于在批处理更新的数据阵列由三个条目的(1, 'first updated'),(2, 'second updated')(3, 'third updated').更新前表中包含行:(1, 'first'),(2, 'second'),(3, 'third').

我来到这篇文章:

为什么批量插入/更新更快?批量更新如何工作?

这似乎做我想要的,但我最终无法弄清楚语法.

我还可以删除所有需要更新的行,并使用批量插入重新插入它们,但我发现很难相信这实际上会更好.

我使用PostgreSQL 8.4,因此这里也可以使用一些存储过程.然而,当我计划最终开源项目时,任何更便携的想法或方法在不同的RDBMS上做同样的事情是最受欢迎的.

后续问题:如何批量"插入或更新"/"upsert"语句?

检测结果

我已经执行了100次10次插入操作,分布在4个不同的表中(总共1000个插入).我使用PostgreSQL 8.4后端在Django 1.3上进行了测试.

这些是结果:

  • 通过Django ORM完成的所有操作 - 每次通过~2.45秒,
  • 相同的操作,但没有Django ORM - 每次通过~1.48秒,
  • 只插入操作,而不查询数据库的序列值~0.72秒,
  • 仅插入操作,以10块为单位执行(总共100块)~0.19秒,
  • 只插入操作,一个大的执行块~0.13秒.
  • 只插入操作,每块大约250条语句,~0.12秒.

结论:在单个connection.execute()中执行尽可能多的操作.Django本身带来了巨大的开销.

免责声明:除了默认主键索引之外,我没有引入任何索引,因此插入操作可能会因此而运行得更快.

sql database postgresql insert sql-update

45
推荐指数
4
解决办法
7万
查看次数

标签 统计

postgresql ×3

database ×2

sql ×2

casting ×1

csv ×1

file-io ×1

insert ×1

integer ×1

sql-update ×1

varchar ×1