我想删除当前打开到特定 PostgreSQL 数据库的所有连接(会话),但不重新启动服务器或断开与其他数据库的连接。
我怎样才能做到这一点?
使用 PostgreSQL v9.1。我有以下表格:
CREATE TABLE foo
(
id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY,
type VARCHAR(60) NOT NULL UNIQUE
);
CREATE TABLE bar
(
id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY,
description VARCHAR(40) NOT NULL UNIQUE,
foo_id BIGINT NOT NULL REFERENCES foo ON DELETE RESTRICT
);
Run Code Online (Sandbox Code Playgroud)
假设第一个表foo是这样填充的:
INSERT INTO foo (type) VALUES
( 'red' ),
( 'green' ),
( 'blue' );
Run Code Online (Sandbox Code Playgroud)
有没有办法bar通过引用foo表轻松插入行?或者我必须分两步完成,首先查找foo我想要的类型,然后在其中插入一个新行bar?
这是一个伪代码示例,显示了我希望可以完成的工作:
INSERT INTO bar (description, foo_id) VALUES
( …Run Code Online (Sandbox Code Playgroud) 我使用One click installer在装有 Mac OS X 的计算机上安装了 PostgreSQL 。然后我尝试使用该psql命令访问 PostgreSQL ,但它似乎不可用。
我收到这条消息:
psql
-bash: psql: command not found
Run Code Online (Sandbox Code Playgroud)
我需要安装更多东西吗?或者我如何配置 PostgreSQL 以便我可以在我的计算机上使用它?
我正在开发一个函数,如果索引不存在,它允许我添加索引。我遇到了无法获得要比较的索引列表的问题。有什么想法吗?
这与使用此代码解决的列创建问题类似:https :
//stackoverflow.com/a/12603892/368511
我可以看到电流search_path:
show search_path ;
Run Code Online (Sandbox Code Playgroud)
我可以search_path为当前会话设置:
set search_path = "$user", public, postgis;
Run Code Online (Sandbox Code Playgroud)
同样,我可以search_path为给定的数据库永久设置:
alter database mydb set search_path = "$user", public, postgis ;
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令永久设置search_path给定角色(用户):
alter role johnny set search_path = "$user", public, postgis ;
Run Code Online (Sandbox Code Playgroud)
但我想知道如何在更改数据库和角色设置search_path之前确定它们是什么(相对于)?
编辑Postgres 9.3
我正在处理具有以下架构的报告:http : //sqlfiddle.com/#!15/fd104/2
当前查询工作正常,如下所示:
基本上它是一个 3 表内连接。我没有做这个查询,而是离开它的开发人员,我想修改查询。如您所见,TotalApplication只计算基于a.agent_id. 您可以totalapplication在结果中看到该列。我想要的是删除它并将其更改totalapplication为新的两列。我想添加一个completedsurvey和partitalsurvey列。所以基本上这部分会变成
SELECT a.agent_id as agent_id, COUNT(a.id) as CompletedSurvey
FROM forms a WHERE a.created_at >= '2015-08-01' AND
a.created_at <= '2015-08-31' AND disposition = 'Completed Survey'
GROUP BY a.agent_id
Run Code Online (Sandbox Code Playgroud)
我刚刚添加AND disposition = 'Completed Survey'但我需要另一列partialsurvey具有相同的查询,completedsurvey唯一的区别是
AND disposition = 'Partial Survey'
Run Code Online (Sandbox Code Playgroud)
和
COUNT(a.id) as PartialSurvey
Run Code Online (Sandbox Code Playgroud)
但我不知道该把查询放在哪里,也不知道查询会是什么样子。所以最终输出有这些列
agent_id, name, completedsurvey, partialsurvey, loginhours, applicationperhour, rph
Run Code Online (Sandbox Code Playgroud)
一旦确定,然后 applicationperhour …
以下摘自一本关于数据库设计的书(Beginning Database Design ISBN:0-7645-7490-6):
使用视图的危险在于根据视图过滤查询,期望读取非常大的表的非常小的部分。任何过滤都应该在视图中完成,因为在视图中的查询完成执行之后,才会应用针对视图本身的任何过滤。视图通常对加快开发过程很有用,但从长远来看,它会完全扼杀数据库性能。
以下是 PostgreSQL 9.5 文档的摘录:
充分利用视图是良好 SQL 数据库设计的一个关键方面。视图允许您封装表结构的细节,这些细节可能会随着应用程序的发展而改变,并隐藏在一致的接口后面。
这两个来源似乎相互矛盾(“不要用视图设计”与“用视图设计”)。
但是,在 PG 中,视图是使用规则系统实现的。因此,可能(这是我的问题)针对视图的任何过滤都被重写为视图中的过滤器,从而导致对基础表执行单个查询。
我的解释是否正确并且 PG 将 WHERE 子句组合进和出视图?还是单独运行它们,一个接一个?任何简短的、自包含的、正确的(可编译的)示例?
在 PostgreSQL 中,我使用now()andcurrent_timestamp函数,我看不出有什么区别:
# SELECT now(), current_timestamp;
now | now
--------------------------------+--------------------------------
04/20/2014 19:44:27.215557 EDT | 04/20/2014 19:44:27.215557 EDT
(1 row)
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
我有一个一定很常见的查询模式,但我不知道如何为它编写有效的查询。我想查找与“最近日期不晚于”另一个表的行相对应的表的行。
inventory比如说,我有一张表格,它代表了我在某一天持有的库存。
date | good | quantity
------------------------------
2013-08-09 | egg | 5
2013-08-09 | pear | 7
2013-08-02 | egg | 1
2013-08-02 | pear | 2
Run Code Online (Sandbox Code Playgroud)
和一张表,“价格”说,它保存了某一天的商品价格
date | good | price
--------------------------
2013-08-07 | egg | 120
2013-08-06 | pear | 200
2013-08-01 | egg | 110
2013-07-30 | pear | 220
Run Code Online (Sandbox Code Playgroud)
如何有效地获得库存表每一行的“最新”价格,即
date | pricing date | good | quantity | price
----------------------------------------------------
2013-08-09 | 2013-08-07 | egg | 5 | 120
2013-08-09 …Run Code Online (Sandbox Code Playgroud) postgresql performance greatest-n-per-group query-performance
postgresql ×10
connections ×1
count ×1
datatypes ×1
derby ×1
foreign-key ×1
functions ×1
index ×1
insert ×1
installation ×1
join ×1
mac-os-x ×1
optimization ×1
performance ×1
plpgsql ×1
primary-key ×1
psql ×1
session ×1
timestamp ×1
view ×1