已添加btree_gist和temporal_tables扩展仍报错:type 'period'不存在
解决PostgreSQL中"type 'period' does not exist"报错问题
我来帮你排查这个问题——你已经安装了btree_gist和temporal_tables扩展,但执行CREATE TABLE b (p PERIOD);时还是提示PERIOD类型不存在,咱们一步步来解决:
1. 先确认扩展是装在当前操作的数据库里
PostgreSQL的扩展是数据库级安装的,你可能在其他数据库装了这两个扩展,但当前操作的数据库里并没有生效。先执行这条命令确认:
SELECT * FROM pg_extension WHERE extname IN ('btree_gist', 'temporal_tables');
如果查询结果里看不到这两个扩展,说明你得切换到目标数据库,重新执行安装命令:
CREATE EXTENSION IF NOT EXISTS btree_gist; CREATE EXTENSION IF NOT EXISTS temporal_tables;
2. 检查temporal_tables扩展是否完整安装
有时候扩展安装可能因为权限、依赖问题没完全创建好PERIOD类型,先检查这个类型是否真的存在:
SELECT * FROM pg_type WHERE typname = 'period';
如果没查到结果,说明temporal_tables没正确生成这个类型,试试卸载后重装(注意:如果已有依赖这些扩展的表,得先处理掉这些依赖再操作):
DROP EXTENSION IF EXISTS temporal_tables; DROP EXTENSION IF EXISTS btree_gist; -- 先装btree_gist,因为temporal_tables依赖它 CREATE EXTENSION btree_gist; CREATE EXTENSION temporal_tables;
3. 验证扩展功能是否正常
可以尝试用temporal_tables提供的函数创建PERIOD值,测试扩展是否真的能用:
SELECT period('2020-01-01'::timestamp, '2020-12-31'::timestamp);
如果这条命令也报错,那基本可以确定是扩展安装不完整,回到第二步重新安装。
4. 检查操作权限
确保你安装扩展时用的用户有足够权限——比如超级用户,或者被授予了CREATE EXTENSION权限的用户。普通用户安装扩展可能会导致部分对象创建失败,进而缺失PERIOD类型。
内容的提问来源于stack exchange,提问作者Thavaprakash Swaminathan
相关产品推荐
相关产品推荐

