安装了ltree扩展,但是create table仍然抛出错误

时间:2014-11-13 04:00:35

标签: postgresql

我添加了ltree扩展名,我可以看到我的数据库中的扩展名,但是当我运行以下查询时:

CREATE TABLE flight_office.document_folder (
document_folder_id serial8,
name varchar,
path ltree,
PRIMARY KEY (document_folder_id) 
);

我明白了: 错误:输入" ltree"不存在

3 个答案:

答案 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');