【问题标题】:why do I require RESTRICT wildcard to drop schema in PostgreSQL为什么我需要 RESTRICT 通配符来删除 PostgreSQL 中的模式
【发布时间】:2013-05-03 09:51:38
【问题描述】:

我在 PostgreSQL 方面的经验很少。我一直在阅读教程和文档,为了创建或删除架构,他们都说我只需要执行:

CREATE SCHEMA myschema; 
DROP SCHEMA myschema; 

但它不起作用。我终于偶然发现我必须使用:

CREATE SCHEMA myschema AUTHORIZATION pgsql;
DROP SCHEMA myschema RESTRICT;

我的安装是否损坏,或者我添加了一些我不应该添加的功能?

更新: 如果我使用 Mac OS X 中的 pgAdmin,它可以工作。 我没有收到任何错误或任何形式的警报。 基本上我只是像这样登录 pgsql 帐户:

su pgsql

然后

psql mydatabase

【问题讨论】:

  • 很奇怪。你是如何创建myuser 的,你授予它什么权利?这真的是 PostgreSQL,还是像 Redshift/Greenplum/etc 这样的 PostgreSQL 变体?我认为您可能只是遇到了所有权问题,但由于您没有显示您运行的真实命令(考虑到拼写错误)、确切的错误消息或有关用户及其权利的任何信息,所以很难说。
  • 感谢您的评论,我猜我的用户是安装过程中创建的 pgsql 用户,是的,它是来自 freebsd 的真正的 postgresql 端口。还有一个奇怪的事情,如果我使用 Mac OS X 中的 pgAdmin3,它可以完美运行,但在 psql 控制台中没有。
  • 你应该打开log_statement = 'all' 看看PgAdmin3 在做什么。仍然非常非常奇怪。 “pgsql 用户”是指用户postgres 吗?通常没有pgsql 用户,除非 FreeBSD 端口与通常的安装特别不同。
  • 等等,你刚才是不是从控制台说没有响应?不是错误吗?打赌你只是在控制台中输入命令时忘记输入分号了。
  • 你说得对,我很惭愧,但我记得我用过它们。也许这个错误与 Mac OS 终端有关。

标签: postgresql schema sql-drop


【解决方案1】:

有许多事情会导致命令无法正确终止。我相信这个答案也会对其他人有所帮助。这可能看起来过于本地化,但我听说它发生在足够多的初学者身上,值得一提。

一般来说,像 CREATE SCHEMA 或 DROP SCHEMA 这样的实用程序语句会在 psql 中返回一些内容,无论是错误还是对所做操作的描述。如果这没有发生,那是不对的。首先要做的是查看提示。

PostgreSQL中的提示形式为:[dbname][line-status][is-superuser]

所以对于一个新行,数据库 mydb,非超级用户,提示符如下: mydb=>

如果我是超级用户,我会得到:

mydb=#

现在要查看的关键字符是= 所在的字符。各种符号都有特殊的含义:

  • = 新行(准备好新输入)
  • - 上一行的继续。您忘记分号了吗?
  • ( 在括号中。你的括号不平衡。
  • $ 在美元报价块中。这些就像$quote$string literal$quote$
  • ' 在单引号字符串文字块内
  • " 在双引号标识符中

可能还有其他一些,但这些是最常见的。通常除了=- 之外,它们是不言自明的。

【讨论】:

    猜你喜欢
    • 2017-11-11
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多