我们可以在表中创建隐藏列吗?只有当我在select语句中显式指定列名时,才应该列出它。
您可以通过创建一个视图并只选择您希望显示的列来有效地做到这一点。
不,没有一种安全的方法可以创建隐藏列,只有在显式指定列名时才会列出。PostgreSQL不提供任何用户可访问的方式来隐藏*
通配符中用户定义的列。
你可以使用任何你选择的用户界面层/查询构建器来做这件事。
(PostgreSQL实际上有隐藏列,你会看到如果你select ctid,xmin,xmax from some_table
,但它不允许用户添加到隐藏列的集合。可以直接修改系统目录来欺骗PostgreSQl,让它认为用户定义的列是一个隐藏的系统列,但是直接修改目录是一个非常糟糕的主意,所以我不会详细解释如何修改。如果你坚持这样做,请阅读pg_attribute
的文档…但要明白,你正在创造一个巨大的脚枪。
你可以设置列的权限,这样用户只能选择一些列,尽管你不能说"除这一列之外的所有列",你必须说"我希望他们能够看到这些列"。
更新:@maybeWeCouldStealAVan有最明智的建议:你可能想要一个视图。把那个答案标为正确,而不是我的。