微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么创建表操作将所有者作为“yugabyte”附加到新表,但连接的数据库具有不同的所有者?

如何解决为什么创建表操作将所有者作为“yugabyte”附加到新表,但连接的数据库具有不同的所有者?

我在笔记本电脑上的 minikube 中安装了 yugabytedb,并创建了一个所有者为“Rodgers”的数据库。 然后我运行 ysqlsh 从终端执行 ysql 命令,其中之一是“CREATE DATABASE ...”。

问题 当我尝试使用外部 Go 应用程序通过向应用程序提供用户作为“Rodgers”和设置的密码来连接到数据库时,它无法连接。 我发现创建的表附加到所有者“yugabyte”,而不是“Rodgers”。 但是我连接的数据库以及运行 CREATE DATABASE 命令的数据库属于 Rodgers。

这是怎么回事?

解决方法

最好使用“ysqlsh”来排练所有这些。当一切正常时,从任何客户端程序(Python、go、...)等连接都可以工作——只要你有正确的驱动程序。 PostgresSQL 驱动程序与 YugabyteDB 配合使用。

以下主要是“ysqlsh”的命令——SQL 和所谓的元命令(以反斜杠开头的那些)。但有时,您会在 O/S 提示符下执行一些命令。所以你必须仔细阅读下面的内容,然后在每个评论之后做它所说的 - 主要是在“ysqlsh”中,但在 O/S 提示下也有几次。所以你不能简单地运行脚本“熄灯”。

从原始的 YB 单节点集群开始(来自“yb-create”)。

$ ysqlsh -h localhost -p 5433 -d yugabyte -U yugabyte

现在按照脚本进行操作。

--  Shows two "Superuser" users: "postgres" and "yugabyte" (nothing else).
\du

-- Shows two databases: "postgres" and "yugabyte" (nothing else except "system" databases).
-- Both "postgres" and "yugabyte" databases are owned by "postgres".
\l

-- Create a new "ordinary user and connect as that user.
create user rodgers login password 'p';
alter user rodgers createdb;

-- Now connect to database yugabyte as user rodgers
\c yugabyte rodgers

-- Create a new database and check it's there.
create database rog_db owner rodgers;
\l 

--       Name       |  Owner   | Encoding | Collate |    Ctype    |   Access privileges   
-- -----------------+----------+----------+---------+-------------+-----------------------
   ...
--  rog_db          | rodgers  | UTF8     | C       | en_US.UTF-8 |
-- ...

-- Now connect to the new "rog_db" database. Works fine.
\c rog_db rodgers

-- Quit "ysqlsh.
\q

重新连接。工作正常。

$ ysqlsh -h localhost -p 5433 -d rog_db -U rodgers

现在继续编写脚本。

-- Works fine.
create table t(k int primary key);

-- Inspect it. First "\d",then "\d t".
\d
--         List of relations
--  Schema | Name | Type  |  Owner  
-- --------+------+-------+---------
--  public | t    | table | rodgers

\d t
--                  Table "public.t"
 Column |  Type   | Collation | Nullable | Default 
-- --------+---------+-----------+----------+---------
--  k      | integer |           | not null | 
-- Indexes:
--     "t_pkey" PRIMARY KEY,lsm (k HASH)

-- This is OK for playing. But terrible for real work.

drop table t;
\c rog_db yugabyte
drop schema public;
\c rog_db rodgers
create schema rog_schema authorization rodgers;
-- For future connect commands.
alter user rodgers set search_path = 'rog_schema';
-- for here and now.
set schema 'rog_schema';
create table t(k int primary key);
\d

--           List of relations
--    Schema   | Name | Type  |  Owner  
-- ------------+------+-------+---------
--  rog_schema | t    | table | rodgers
--------------------------------------------------------------------------------

我刚刚在笔记本电脑 (macOS Big Sur) 上使用“YB-2.2.0.0-b0”完成了所有这些操作。一切正常。

请在您的 minikube 环境中尝试此操作并反馈。

此致,Yugabyte Inc. 的技术产品经理 Bryn Llewellyn。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?