一个用户如何访问PostgreSQL的information_schema.columns的权限?

6
我创建了一个用户,如下所示。
create role testuser1 with password 'testuser1' login; 
 alter role testuser1 with createrole createdb;

现在我使用上述用户登录到PostgreSQL中,如下所示:
psql -U testuser1 -d template1 

我得到了模板1的命令提示符,如下所示。
template1# 

接下来,我创建了一个如下所示的样本数据库

模板# create database testdb; 我成功创建了数据库。现在,我退出postgres。然后,我尝试使用样本凭据登录,但使用数据库testdb,并尝试使用以下命令导入模式文件(让它成为test.sql)

psql -h localhost -p 5432 -U testuser1 -d testdb -f "/mnt/hgfs/shared_ubuntu/sample_test_schema/pg/test.sql"

导入成功。在testdb中,以下是表格。

 Schema |    Name    | Type  |  Owner   
--------+------------+-------+----------
 public | pretabinto | table | postgres
 public | serial     | table | postgres
 public | temp       | table | postgres

现在,我尝试使用以下查询获取表格及其列信息。但是,结果返回了0个列表。

SELECT table_name,column_name,data_type 
FROM information_schema.columns 
WHERE table_schema NOT IN ('pg_catalog', 'information_schema');

如何使用上述用户(例如新创建的用户)获取列信息。

您需要使用模板名称template0创建新的数据库。请参阅手册http://www.postgresql.org/docs/9.3/static/manage-ag-templatedbs.html。默认情况下,它是`template1`。 - Sarfaraz Makandar
1个回答

9

用户只能查看他们拥有读取权限的表在 INFORMATION_SCHEMA 的 COLUMNS 表中的数据。因此,你需要做的是:

GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC TO testuser2;

此外,我建议不要使用template1数据库作为“临时空间”。该数据库用于创建其他数据库的模板,这意味着您在此之后创建的每个数据库中都会有大量垃圾。我建议改用我们提供的“postgres”数据库作为测试数据库。

我在Greenplum中遇到了错误。 ERROR: 在"ALL"附近有语法错误 LINE 1: GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC TO neeraj; ^ ********** Error **********ERROR: 在"ALL"附近有语法错误 SQL状态:42601 字符:17 - Neeraj Sharma
是的,这是因为Greenplum基于PostgreSQL 8.1,而在该版本中我们还没有添加"GRANT ON ALL"。不幸的是,您需要逐个授予每个视图/函数的权限。 :-( - FuzzyChef
实际上,我想从其他用户中选择information_schema.schemata视图,但是在授予选择权限后,我无法获取数据。 - Neeraj Sharma
选择成功运行,但没有数据显示。@fuzzychef 有什么建议吗? - Neeraj Sharma
也许发一个新的、实际的问题?我已经好几年没用Greenplum做过任何事情了,所以如果有其他人回答的话,你会更好。 - FuzzyChef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接