我正在运行一些查询时遇到空间问题,postgreSQL用完了临时空间。查询生成几GB的列表(它们已经是拆分的)
目前我想通过将temp_tables空间移动到另一个文件夹来解决它,然后再将整个数据库移动到下一步。
等/ postgresql.conf中
temp_tablespaces = '/var/lib/postgresql/9.2/importdb02/tmp_consDB'
/var/lib/postgresql/9.2/importdb02 /
drwxr-xr-x 2 postgres postgres 4096 May 22 12:08 tmp_consDB
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链接到另一个驱动器,但那是黑客版本。
我是在Clodoaldo Neto的答案之后做到的。
作为postgres
CREATE TABLESPACE tempimpdb02 LOCATION '/var/lib/postgresql/9.2/importdb02/tmp_consDB';
的/ var /等
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/tmp_consDB(PG_9.2 ....)中有一个文件夹。
但是查询仍然使用/ base / psql_temp作为临时数据,而'tempimpdb02'中的文件夹是空的。
答案 0 :(得分:4)
传递给temp_tablespaces
is a list of names of tablespaces的值。以超级用户身份tablespace must be created first:
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 privilege。