九月 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';

第四步,尝试删除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语句删除表空间。