将SELECT查询更改为限制

时间:2016-12-30 22:14:59

标签: postgresql

我正在研究1M +行表。插入数据的软件有时会尝试选择所有行。如果它试图这样做;它崩溃了。

我无法修改软件,所以我试图在Postgresql端实现修复。

我希望Postgresql将来自特殊用户的SELECT查询结果限制为1。

我试图实施一个RULE,但未能成功实现。欢迎任何建议。

BR,

2 个答案:

答案 0 :(得分:0)

您可以重命名该表并使用表名创建一个视图(从重命名的表中选择)。

然后,您可以在视图定义中包含LIMIT子句。

答案 1 :(得分:0)

您可能需要索引。让我给你几个场景

  1. 其中一个字段有唯一约束但没有相应的索引。这种方式当您插入记录时,PostgreSQL必须扫描该表以查看该字段中是否存在具有相同值的现有记录。

  2. 您的软件模仿了唯一的字段约束。在插入新记录之前,它会在表中扫描其中一个字段中具有相同值的记录,以检查此记录是否已存在。右边的索引肯定会有所帮助。

  3. 您的软件想要计算下一个" id"值。在这种情况下,它会运行var arr = [[1,2,3],[],[3,4,5]]; var newArr = arr.filter(function(item){ return item.length !== 0; }); 以查找下一个可用值。 " ID"需要一个索引。

  4. 尝试找出索引其中一个表字段是否有帮助。您还可以尝试跟踪和分析提交给服务器的查询,并查看这些查询是否可以从索引表中获益。您可以通过How to log PostgreSQL queries?

    方式启用查询记录

    另一个猜测是,您的软件会在处理之前缓冲所有记录。将1M记录读入内存可能会导致崩溃。限制fetchSize(例如,如果您的软件使用JDBC,您可以将defaultRowFetchSize连接参数添加到连接字符串)可能会有所帮助,但我意识到您可能无法更改现有软件从数据库获取数据的方式。