Q在pgsql上
时间:2020-03-06 14:46:04 来源:igfitidea点击:
我是pgsql的新手。我对此有几个疑问:
1)我知道可以通过<schema>。<table_name>
访问列,但是当我尝试访问<db_name>。<schema>。<table_name>
之类的列时,会抛出类似
Cross-database references are not implemented
我该如何实施?
2)我们有10个以上的表,而6个中有2000多个行。将所有这些都维护在一个数据库中可以吗?还是应该创建数据库来维护它们?
3)从上面的问题表中有超过2000行,对于一个特定的过程,我需要几行数据。我创建了视图来获取这些行。
例如:一个表包含员工的详细信息,他们分为3种类型;经理,建筑师和工程师。非常明显的是,该表并未获取每个进程的所有信息...进程用于从中读取数据...
我认为有两种方法来获取数据" SELECT * FROM emp WHERE type ='manager'",或者我可以为经理,架构师和工程师创建视图并获取数据" SELECT * FROM view_manager"。
我们能建议任何更好的方法吗?
4)视图是否也需要像表一样的存储空间?
提前感谢。
解决方案
1:一种解决方法是打开与另一个数据库的连接,并将其设置为当前连接(如果使用psql(1))。但是,仅当我们不尝试在两个数据库中联接表时,此方法才起作用。
1)这意味着它不是Postgres支持的功能。我不知道创建在多个数据库上运行的查询的任何方法。
2)对一个数据库很好。单个数据库可以包含数十亿行。
3)不要打扰创建视图,无论如何查询都足够简单。
4)除了查询定义外,视图不需要数据库中的空间。
- 跨数据库已经存在于PostGreSQL中多年了。我们必须在数据库名称前加上数据库名称(当然,有权在数据库名称上进行查询)。我们将获得类似以下内容的信息:SELECT alias_1.col1,alias_2.col3 FROM table_1作为alias_1,database_b.table_2作为alias_2 WHERE ...如果数据库在另一个实例上,则需要使用dblink contrib。
- 这个问题没有道理。请完善。
- 通常,视图用于简化重复使用它们的其他查询的编写。就情况而言,正如我们所描述的,也许存储过程会更适合需求。
- 不,需要视图定义。