如何解决PostgreSQL 12.3:错误:查询结果内存不足
我有一个AWS RDS PostgreSQL 12.3(t3.small,2CPU 2GB RAM)。我有这张桌子:
CREATE TABLE public.phones_infos
(
phone_id integer NOT NULL DEFAULT nextval('phones_infos_phone_id_seq'::regclass),phone character varying(50) COLLATE pg_catalog."default" NOT NULL,company_id integer,phone_tested boolean DEFAULT false,imported_at timestamp with time zone NOT NULL,CONSTRAINT phones_infos_pkey PRIMARY KEY (phone_id),CONSTRAINT fk_phones_infos FOREIGN KEY (company_id)
REFERENCES public.companies_infos (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE CASCADE
)
此表中正好有137468条记录,使用:
SELECT count(1) FROM phones_infos;
当我使用pgAdmin 4.6时,此简单查询会发生错误:查询结果内存不足:
SELECT * FROM phones_infos;
我有5M +记录的表,以前从来没有这个问题。
EXPLAIN SELECT * FROM phones_infos;
Seq Scan on phones_infos (cost=0.00..2546.68 rows=137468 width=33)
我阅读了此article以查看是否可以找到答案,但是很不幸,正如我们在度量标准上所看到的:没有旧的挂起连接会占用内存。
根据建议, shared_buffers 的大小似乎正确:
SHOW shared_buffers;
449920kB
我应该尝试什么?
解决方法
问题必须在客户端。顺序扫描在PostgreSQL中不需要太多内存。
pgAdmin会将完整的结果集缓存在RAM中,这可能解释了内存不足的情况。
我看到两个选择:
-
限制pgAdmin中结果行的数量:
SELECT * FROM phones_infos LIMIT 1000;
-
使用其他客户端,例如
来避免此问题psql
。在那里,您可以通过设置\set FETCH_COUNT 1000
以便分批提取结果集。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。