标签: postgresql

如何在不停止服务器的情况下删除与特定数据库的所有连接?

我想删除当前打开到特定 PostgreSQL 数据库的所有连接(会话),但不重新启动服务器或断开与其他数据库的连接。

我怎样才能做到这一点?

postgresql session connections

77
推荐指数
3
解决办法
19万
查看次数

如何插入包含外键的行?

使用 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)

postgresql foreign-key insert postgresql-9.1

77
推荐指数
3
解决办法
37万
查看次数

如何在 Mac OS X 上运行 psql?

我使用One click installer在装有 Mac OS X 的计算机上安装了 PostgreSQL 。然后我尝试使用该psql命令访问 PostgreSQL ,但它似乎不可用。

我收到这条消息:

psql
-bash: psql: command not found
Run Code Online (Sandbox Code Playgroud)

我需要安装更多东西吗?或者我如何配置 PostgreSQL 以便我可以在我的计算机上使用它?

postgresql psql installation mac-os-x

76
推荐指数
5
解决办法
24万
查看次数

如果索引不存在则创建索引

我正在开发一个函数,如果索引不存在,它允许我添加索引。我遇到了无法获得要比较的索引列表的问题。有什么想法吗?

这与使用此代码解决的列创建问题类似:https :
//stackoverflow.com/a/12603892/368511

postgresql index plpgsql functions postgresql-8.4

74
推荐指数
2
解决办法
9万
查看次数

给定数据库和用户的 search_path 是什么?

我可以看到电流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之前确定它们是什么(相对于)?

postgresql configuration

73
推荐指数
3
解决办法
12万
查看次数

Postgres Count 在同一个查询中具有不同的条件

编辑Postgres 9.3

我正在处理具有以下架构的报告:http : //sqlfiddle.com/#!15/fd104/2

当前查询工作正常,如下所示:

在此处输入图片说明

基本上它是一个 3 表内连接。我没有做这个查询,而是离开它的开发人员,我想修改查询。如您所见,TotalApplication只计算基于a.agent_id. 您可以totalapplication在结果中看到该列。我想要的是删除它并将其更改totalapplication为新的两列。我想添加一个completedsurveypartitalsurvey列。所以基本上这部分会变成

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 …

postgresql join count postgresql-9.3 aggregate-filter

72
推荐指数
1
解决办法
8万
查看次数

视图对 PostgreSQL 的性能有害吗?

以下摘自一本关于数据库设计的书(Beginning Database Design ISBN:0-7645-7490-6):

使用视图的危险在于根据视图过滤查询,期望读取非常大的表的非常小的部分。任何过滤都应该在视图中完成,因为在视图中的查询完成执行之后,才会应用针对视图本身的任何过滤。视图通常对加快开发过程很有用,但从长远来看,它会完全扼杀数据库性能。

以下是 PostgreSQL 9.5 文档的摘录:

充分利用视图是良好 SQL 数据库设计的一个关键方面。视图允许您封装表结构的细节,这些细节可能会随着应用程序的发展而改变,并隐藏在一致的接口后面。

这两个来源似乎相互矛盾(“不要用视图设计”与“用视图设计”)。

但是,在 PG 中,视图是使用规则系统实现的。因此,可能(这是我的问题)针对视图的任何过滤都被重写为视图中的过滤器,从而导致对基础表执行单个查询。

我的解释是否正确并且 PG 将 WHERE 子句组合进和出视图?还是单独运行它们,一个接一个?任何简短的、自包含的、正确的(可编译的)示例?

postgresql optimization view

70
推荐指数
4
解决办法
5万
查看次数

now() 和 current_timestamp 的区别

在 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)

我错过了什么吗?

postgresql timestamp

69
推荐指数
1
解决办法
7万
查看次数

如何有效地获得“最近的对应行”?

我有一个一定很常见的查询模式,但我不知道如何为它编写有效的查询。我想查找与“最近日期不晚于”另一个表的行相对应的表的行。

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

68
推荐指数
5
解决办法
13万
查看次数

使用 UUID 或 GUID 作为主键有什么缺点?

我想建立一个分布式系统。我需要将数据存储在数据库中,使用UUIDGUID作为某些表的主键会很有帮助。我认为这是这种设计的一个缺点,因为 UUID/GUID 非常大并且它们几乎是随机的。另一种方法是使用自动递增的 INT 或 LONG。

使用 UUID 或 GUID 作为我的表的主键有什么缺点?

我可能会使用 Derby/JavaDB(在客户端上)和 PostgreSQL(在服务器上)作为 DBMS。

postgresql primary-key datatypes derby

67
推荐指数
2
解决办法
4万
查看次数