我添加了ltree扩展名,我可以看到我的数据库中的扩展名,但是当我运行以下查询时:
CREATE TABLE flight_office.document_folder (
document_folder_id serial8,
name varchar,
path ltree,
PRIMARY KEY (document_folder_id)
);
我明白了: 错误:输入" ltree"不存在
答案 0 :(得分:1)
正如@pozs指出的那样,EXTENSION应该与模式一起添加,以下内容对我有用:
CREATE EXTENSION IF NOT EXISTS LTREE
WITH SCHEMA schema_name;
答案 1 :(得分:1)
这也有效。如果未指定架构,它将为公共架构创建扩展。
CREATE EXTENSION IF NOT EXISTS ltree;
答案 2 :(得分:0)
您的架构可能不包含在search_path
中。
要以不同于ltree
的架构安装public
扩展名,需要执行一些步骤。假设您的架构称为“ myschema”:
首先创建架构并安装扩展名:
CREATE SCHEMA myschema;
CREATE EXTENSION IF NOT EXISTS ltree
WITH SCHEMA myschema;
您可以使用来检查最后一步
SELECT *
FROM information_schema.schemata
WHERE schema_name = 'myschema';
SELECT *
FROM pg_available_extensions
WHERE name = 'ltree';
和
SELECT *
FROM pg_extension;
select *
from pg_catalog.pg_namespace;
其中extowner
表示扩展可用的架构。
然后,检查myschema
是否属于search_path
:
SHOW search_path;
;如果没有,请添加您的架构:
SET search_path TO "$user", public, myschema;
后者仅为会话设置search_path
。如果您想永久设置它,请使用
ALTER DATABASE <DATABASE_NAME> SET search_path TO "$user", public, myschema;
最后尝试创建表:
create table myschema.temptable (
id INTEGER PRIMARY KEY,
path ltree UNIQUE
);
并添加一些值:
INSERT INTO myschema.temptable (id, path)
values (1, 'root');