我正在数据库中寻找一条我不了解的精确信息。数据库在一台单独的机器上,但我可以登录它,并psql以管理员权限启动命令行。
这是第三方产品,他们回答问题的速度很慢。我知道数据在那个数据库里面,所以我想做一点逆向工程。
给定一个表名,是否可以获得该表中列名的列表?
例如,在 SQL Server 中,可以将表转储到可重用CREATE语句中,该语句以文本方式列出了该表所包含的所有列。
以下摘自一本关于数据库设计的书(Beginning Database Design ISBN:0-7645-7490-6):
使用视图的危险在于根据视图过滤查询,期望读取非常大的表的非常小的部分。任何过滤都应该在视图中完成,因为在视图中的查询完成执行之后,才会应用针对视图本身的任何过滤。视图通常对加快开发过程很有用,但从长远来看,它会完全扼杀数据库性能。
以下是 PostgreSQL 9.5 文档的摘录:
充分利用视图是良好 SQL 数据库设计的一个关键方面。视图允许您封装表结构的细节,这些细节可能会随着应用程序的发展而改变,并隐藏在一致的接口后面。
这两个来源似乎相互矛盾(“不要用视图设计”与“用视图设计”)。
但是,在 PG 中,视图是使用规则系统实现的。因此,可能(这是我的问题)针对视图的任何过滤都被重写为视图中的过滤器,从而导致对基础表执行单个查询。
我的解释是否正确并且 PG 将 WHERE 子句组合进和出视图?还是单独运行它们,一个接一个?任何简短的、自包含的、正确的(可编译的)示例?
我正在尝试运行以下 sql 命令:
SELECT ARRAY(
SELECT column_name
FROM information_schema.columns
WHERE table_name ='gis_field_configuration_stage'
);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ERROR: could not find array type for datatype information_schema.sql_identifier
Run Code Online (Sandbox Code Playgroud) pg_catalog我了解和之间的高级差异information_schema。
但在许多情况下,工具可以选择使用其中任何一个。我想知道是否存在性能原因导致我们应该选择其中之一。其中之一的查询预计会更快吗?它们在锁方面的工作方式相同吗?