目标是 (1)创建一个连接,(2)返回另一个数据库的视图,以及 (3)关闭所有要存储在视图中的同一个连接(没有存储过程或嵌入式密码)。我想出了以下代码,它使用信任帐户并且似乎可以工作,直到过滤布尔字段。搜索false(field=false) 有效,但搜索true(field=true) 或IS NOT NULL提示输入密码。
返回数据时不需要密码真的很奇怪,但是在过滤时,那就是需要密码的时候。
PostgreSQL: v8.4:
v_sessions),它包含两个字段:文本字段和布尔字段,它是用CASE语句创建的。从 db_local(作为 md5_user)中:
-- Creates okay:
CREATE VIEW v_sessions AS
SELECT * FROM (
select '1' query_type,'' as username, false as is_logged_in
from dblink_connect_u('connection', 'host=development dbname=db_remote user=trusted_user')
union
select '2' query_type, username, is_logged_in
from …Run Code Online (Sandbox Code Playgroud) BEGIN;
INSERT INTO foo_table(foo_column) VALUES('a'),('b'),('c');
-- SELECT * FROM pg_stat_activity WHERE ...
-- shows records with a flag if they have been added/deleted/updated
END;
Run Code Online (Sandbox Code Playgroud)
有没有办法查看 PostgreSQL 9.x 中给定表的事务未提交的插入/删除?这纯粹是为了视觉确认。
虽然我最初的想法是否定的(只对表执行 SQL-Select),但某些用户想要可视化事务中的差异。如果有很多保存点和事务,我可以看到这会有什么帮助。因此,值得向整个社区询问。
我遇到的一些表没有任何NOT NULL约束,这在查询时产生了一些问题。
我很好奇使用类似的东西是什么感觉NOT NULL DEFAULT '',它会coalesce()在检索/过滤记录时取代函数的需要。另一方面,不是合并,你必须使用CASE语句,或者,如果你仍然想使用合并,你会做类似的事情coalesce(nullif(field_foo,''), field_bar)
我正在尝试修改共享开发数据库,供开发团队用于应用程序开发/测试。
大多数集体工作(表名、视图等)都存储在公共环境中模式中,但我已经为每个用户设置了模式以用作临时空间。然而,真正的目标是用户使用其架构中的对象(如果存在),然后依赖其他对象,就像今天使用 search_path 的方式一样。
用一个例子可能会更好地描述这一点。假设团队正在开发一个汽车维修应用程序的数据库,其中包含一些表和视图:
public.automobiles
public.parts
public.inventory
public.mechanics
public.schedule
public.v_repairs -- view that joins fields from all tables above
Run Code Online (Sandbox Code Playgroud)
这非常有效,但假设开发人员(例如 Sally)想要测试一项新功能,用她自己的数据集来检查视觉反馈或阈值测试。她在自己的架构中创建了一个表sally.schedule。因为默认的search_path类似于"$user",public,所以她创建的任何简单查询都会在公开之前首先检查她的架构。例如:
SELECT * FROM schedule LEFT JOIN mechanics USING(mechanic_id);
Run Code Online (Sandbox Code Playgroud)
当 sally 连接到数据库时,这将使用 public.mechanics 和 sally.schedule。这正是预期的用途,但是在保存视图时,它通过插入架构来完全限定表名称。因此,如果将上面相同的查询创建为公共模式中的视图,它将如下所示:
SELECT * FROM public.schedule LEFT JOIN public.mechanics USING(mechanic_id);
Run Code Online (Sandbox Code Playgroud)
search_path 的魔力被否定了。当Sally连接到数据库调用视图时(SELECT * FROM v_mechanics_schedule ) 时,它会忽略她创建的 sally.schedule 表,而只使用公共表。
有没有办法在保存视图时不让 Postgres 存储表/视图对象的架构名称?
注意:这是我正在研究的新事物,但我从未真正需要过它,因为开发人员通常可以克隆应用程序、复制数据库并在自己的沙箱环境中工作。不需要一些巧妙的协作模式设置