【问题标题】:Can create extension but can't alter in PostgreSQL可以创建扩展但不能在 PostgreSQL 中更改
【发布时间】:2014-04-26 15:27:22
【问题描述】:

扩展程序是由用户 deploy 创建的:

CREATE EXTENSION ltree;

现在我需要将扩展​​移动到另一个架构(仍然是 deploy 用户,架构 utils 也归 deploy 用户所有)。所以我这样做:

ALTER EXTENSION ltree SET SCHEMA utils;

失败:

错误:必须是扩展 ltree 的所有者

所以 2 个问题:

  1. 为什么 PG 允许为deploy 用户创建扩展,但不允许同一用户更改它?
  2. 如何更改扩展程序的架构仍然是deploy 用户?

谢谢。

【问题讨论】:

    标签: sql postgresql rdbms postgresql-extensions


    【解决方案1】:

    扩展必须可重定位才能移动到另一个架构。

    最简单的解决方案可能是从架构中删除扩展,然后在新架构中创建它。

    【讨论】:

    • 可重定位?这是许可还是什么?为什么同一用户创建的扩展不能重新分配给同一用户创建的架构?删除扩展不是一个好的选择,因为依赖对象太多(我也必须删除并重新创建)。
    • 我刚刚检查了 ltree.control,它在 9.3 上具有 relocatable = true。你的版本是什么?你能检查一下 ltree.control 看看 relocatable 的设置是什么吗?
    • 你有什么样的依赖对象?这些也可能会干扰架构更改。
    • 我在 PG 9.3 上。依赖对象是引用ltreelquery(没有完全限定路径)和少数列的函数。所以我只是将utils 模式添加到数据库的search_path
    猜你喜欢
    • 1970-01-01
    • 2016-01-04
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多