我目前在运行一些查询时遇到了空间问题,postgreSQL耗尽了临时空间。查询生成几个GB的列表(并且它们已经是分割的部分)。
目前,我想通过将temp_tablespace移动到另一个文件夹来解决这个问题,然后再将整个DB作为下一步移动。
etc/postgresql.conf
temp_tablespaces = '/var/lib/postgresql/9.2/importdb02/tmp_consDB'/var/lib/postgresql/9.2/importdb02 02/
drwxr-xr-x 2 postgres postgres 4096 May 22 12:08 tmp_consDBpostgresql:postgresql是文件夹的所有者,我重新启动了,但是postgreSQL仍然没有使用这个表空间进行查询。
当我通过DF运行查询和监视可用空间时,它仍然使用这些临时表的主表空间,我还可以看到文件夹/var/lib/./base/pgsql_tmp在temp_tablespace文件夹保持空的情况下正在增加。
查询都是这样的
COPY(
SELECT column_a,
column_b,
(around 8 group by columns)
sum(tosumup),
sum(tosumup)
(up to 100 sum columns)
FROM master_table
WHERE id>=25000 AND id<50000 (running in batches)
GROUP BY
group by colums
) TO stdout WITH DELIMITER ';' CSV HEADER;我在这里错过了什么?
我的替代解决方案是将/base/pg_tmp链接到另一个驱动器,但这是黑客版本。
我是在克洛多尔多·内托的回答后这么做的
作为postgres
CREATE TABLESPACE tempimpdb02 LOCATION '/var/lib/postgresql/9.2/importdb02/tmp_consDB';/var/etc
temp_tablespaces = 'tempimpdb02'重新启动,检查一切
postgres=# SELECT * FROM pg_tablespace;
spcname | spcowner | spcacl | spcoptions
-------------+----------+--------+------------
pg_default | 10 | |
pg_global | 10 | |
tempimpdb02 | 10 | |
(3 rows)
postgres=# show temp_tablespaces;
temp_tablespaces
------------------
tempimpdb02
(1 row)现在在/var/lib/postgresql/9.2/importdb02 db02/tmp_consDB(PG_9.2.)中有一个文件夹。
然而,查询仍然对临时数据使用/base/psql_temp,而'tempimpdb02‘中的文件夹是空的。
发布于 2013-05-23 12:20:37
传递给是表空间的名称列表。的值。作为超级用户的必须首先创建表空间。:
CREATE TABLESPACE tempimpdb02 LOCATION '/var/lib/postgresql/9.2/importdb02/tmp_consDB';现在在表空间中创建一个表:
create table t tablespace tempimpdb02 as
SELECT column_a,
column_b,
(around 8 group by columns)
sum(tosumup),
sum(tosumup)
(up to 100 sum columns)
FROM master_table
WHERE id>=25000 AND id<50000 (running in batches)
GROUP BY group by colums必须在表空间中拥有create权限。
https://stackoverflow.com/questions/16713229
复制相似问题