PostgreSQL 教程: DROP TABLESPACE 删除表空间

九月 25, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的DROP TABLESPACE语句删除表空间。

PostgreSQL DROP TABLESPACE 语句简介

DROP TABLESPACE语句从当前数据库中删除表空间:

DROP TABLESPACE [IF EXISTS] tablespace_name;

在此语法中,您在DROP TABLESPACE关键字后指定要删除的表空间的名称。

当表空间不存在时,您可以使用IF EXISTS选项指示 PostgreSQL 发出通知而不是错误。

只有表空间所有者或超级用户才能执行删除表空间的DROP TABLESPACE语句。

PostgreSQL DROP TABLESPACE 示例

首先,创建一个新表空间,名为demo,并将其映射到c:\data\demo目录。

CREATE TABLESPACE demo 
LOCATION 'c:/data/demo';

其次,创建一个新数据库,名为dbdemo,并将其表空间设置为demo

CREATE DATABASE dbdemo 
TABLESPACE = demo;

第三步,在dbdemo数据库中创建一个新表,名为test,并将其tablespace设置为demo

CREATE TABLE test (
	ID serial PRIMARY KEY,
	title VARCHAR (255) NOT NULL
) TABLESPACE demo;

以下语句返回demo表空间中的所有对象:

SELECT
	ts.spcname,
	cl.relname
FROM
	pg_class cl
JOIN pg_tablespace ts 
    ON cl.reltablespace = ts.oid
WHERE
	ts.spcname = 'demo';

PostgreSQL Drop Tablespace example

第四步,尝试删除demo表空间:

DROP TABLESPACE demo;

PostgreSQL 发出错误:

[Err] ERROR: tablespace "demo" is not empty

因为demo表空间不为空,所以不能删除它。

第五步,登录postgres数据库并删除dbdemo数据库:

DROP DATABASE dbdemo;

您不一定要删除数据库,也可以通过使用 ALTER DATABASE 语句,将其移动到另一个表空间,例如pg_default,如下所示:

ALTER DATABASE dbdemo
SET TABLESPACE = pg_default;

第六步,再次删除demo表空间:

DROP TABLESPACE demo;

完成了。demo表空间已成功删除。

在本教程中,您学习了如何使用 PostgreSQL 的DROP TABLESPACE语句删除表空间。