PostgreSQL – 删除表空间
在 PostgreSQL 中,DROP TABLESPACE语句用于删除表空间。
Syntax: DROP TABLESPACE [IF EXISTS] tablespace_name;
我们来分析一下上面的语法:
- 首先,在 DROP TABLESPACE关键字后指定要删除的表空间的名称。
- 其次,如果表空间不存在,请使用IF EXISTS选项来处理错误。
注意:需要注意的是,只有表空间所有者或超级用户才能执行DROP TABLESPACE语句。
例子:
首先,我们创建一个名为gfg的新表空间 并将其映射到 C:\data\gfg目录:
CREATE TABLESPACE gfg
LOCATION 'C:\data\gfg';
现在创建一个名为db_gfg的数据库并将其表空间设置为gfg :
CREATE DATABASE db_gfg
TABLESPACE = gfg;
现在在db_gfg 中创建一个名为test的新表并将其表空间设置为gfg :
CREATE TABLE test (
ID serial PRIMARY KEY,
title VARCHAR (255) NOT NULL
) TABLESPACE gfg;
以下语句返回gfg 中的所有对象 表空间:
SELECT
table_space.spcname,
class.relname
FROM
pg_class class
JOIN pg_tablespace table_space
ON class.reltablespace = table_space.oid
WHERE
table_space.spcname = 'gfg';
这将导致以下情况:
现在,如果您尝试删除gfg表空间:
DROP TABLESPACE gfg;
这将引发以下错误:
由于 gfg 表空间不为空,因此无法删除该表空间。现在,登录到 Postgres 数据库并删除db_gfg数据库:
DROP DATABASE db_gfg;
现在再次删除gfg表空间:
DROP TABLESPACE gfg;
现在使用以下命令检查表空间以进行验证:
\db+
输出: