标签: postgresql

Postgres中奇怪的UTC偏移时区解析

Postgres 在解析时区时表现出一些奇怪的行为,或者我只是不明白它是如何工作的。

文档

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'MST';
Result: 2001-02-16 18:38:40
Run Code Online (Sandbox Code Playgroud)

该示例采用 EST (UTC-5) 中指定的时间戳并将其转换为 MST (UTC-7) 中的本地时间。

似乎意味着“MST”可以与“UTC-7”互换,但行为与您期望的相反。

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'UTC-7';
Result: 2001-02-17 08:38:40
Run Code Online (Sandbox Code Playgroud)

它没有使用时区“UTC-7”,而是使用时区“UTC+7”,相差 14 小时。

使用 ISO 8601 时区符号也会产生与预期结果相反的结果:

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE '-7';
Result: 2001-02-17 08:38:40

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE '-07';
Result: 2001-02-17 08:38:40

SELECT TIMESTAMP …
Run Code Online (Sandbox Code Playgroud)

postgresql timezone

4
推荐指数
1
解决办法
1465
查看次数

在 where 子句中使用子查询列

这个问题已经被问过几次,甚至也得到了回答,但这对我没有帮助,这就是为什么我再次发布它。我有这个查询:

select u.*,l.*, 
(
    select count(cr.id) 
    from cloud_recordings cr 
    left join cameras c 
        on c.owner_id=u.id 
    where c.id=cr.camera_id
) valid_licence
from users u 
left join licences l 
    on l.user_id=u.id;
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当我在最后放一个 where 子句时:

select u.*,l.*, 
(
    select count(cr.id) 
    from cloud_recordings cr 
    left join cameras c 
        on c.owner_id=u.id 
    where c.id=cr.camera_id
) valid_licence
from users u 
left join licences l 
    on l.user_id=u.id
where valid_licence > 0;
Run Code Online (Sandbox Code Playgroud)

它只是给了我一个错误:

错误:“valid_licence”列不存在第
4 行:在 l.user_id=u.id 上留下加入许可 l,其中 valid_licence >..

postgresql

4
推荐指数
1
解决办法
3749
查看次数

有没有办法 SELECT n ON (如 DISTINCT ON,但每个都不止一个)

我有一个us_customers看起来像这样的表(有数十万行):

+----------+----------+
|    id    | us_state |
+----------+----------+
| 12345678 | MA       |
| 23456781 | AL       |
| 34567812 | GA       |
| 45678123 | FL       |
| 56781234 | AZ       |
| 67812345 | MA       |
| 78123456 | CO       |
| 81234567 | FL       |
+----------+----------+
Run Code Online (Sandbox Code Playgroud)

...我想n从每个us_state.

有没有办法在 PostgreSQL 9.3 中干净利落地做到这一点?

我可以通过以下方式us_state轻松地从每个客户那里获得一位客户:

SELECT DISTINCT ON (us_state) id
FROM us_customers
ORDER BY us_state;
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要来自每个州的三个客户,有没有一种方法可以在不多次运行相同查询的情况下做到这一点?

postgresql greatest-n-per-group distinct

4
推荐指数
1
解决办法
1369
查看次数

如何在同一个数据库集群中复制 Postgres 数据库?

我想复制 Postgres 数据库而不使用pg_dump. 源数据库和目标数据库都在同一台机器上(测试和生产服务器)。

我想创建master_db_copy生产服务器的精确副本master_db

我从命令行尝试过:

pg_dump -vO master_db | gzip > master_db
gunzip -cV master_db.sql.gz | psql master_db_copy
Run Code Online (Sandbox Code Playgroud)

有更好/更快的方法吗?

postgresql replication

4
推荐指数
1
解决办法
5794
查看次数

一个列的两个名称

我有foo一个表中命名的列。我在脚本中构建了查询,使用这个名称。

我现在想将表中的列重命名为bar. 这将破坏脚本(有几个,但如有必要,可以更改它们)。该表被其他表引用。我想重命名,因为该列中存储的内容的上下文已更改。

一个列可以有两个名称吗?

postgresql database-design

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

Postgresql 错误:无法在索引中重新找到父键

我有一个带有 postgresql 9.3 DB(托管在 Ubuntu VM 上)的 Django 应用程序,最近该 VM 磁盘空间不足(导致no space left on device我的日志中出现错误)。

我清除了设备上的空间,一切都恢复了在线。

但是现在,对于我的少数请求,我已经开始收到django.db.utils:DatabaseError带有描述的警报failed to re-find parent key in index "links_grouptraffic_time" for split pages 24582/24583links_grouptraffic是我的数据模型之一,并且time是该数据模型中的一个属性。

有人可以解释一下这意味着什么的背景,以及解决这个问题的方法吗?提前致谢!


postgresql index postgresql-9.3

4
推荐指数
1
解决办法
5083
查看次数

与此时间戳一起使用的函数是什么?

我有时间戳(存储为 BIGINT)格式,我无法变成人类可读的格式:

1462975819250
Run Code Online (Sandbox Code Playgroud)

它指向 2016 年 5 月 11 日的日期。但是函数 to_timestamp() 将其转换为:

48329-11-10 13:00:49.999872+01
Run Code Online (Sandbox Code Playgroud)

我想创建一个可以显示这些值的 VIEW,不知道要使用什么函数。

该字段由 Java 程序(我认为是 EclipseLink)编写。我没有程序的源代码。

postgresql timestamp java

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

使用带有 psql 变量作为参数的表达式创建序列

我已经用 Postgres 玩了一个星期左右,我正在看看是否可以使用表达式设置序列的最小值/最大值。具体目标是为服务器之间的不相交范围自动创建脚本,以避免多主设置中的密钥冲突。

例如,使用 psql:

CREATE SEQUENCE key_seq MINVALUE (:servernum * :stride)
                        MAXVALUE ((:servernum + 1) * :stride - 1);
Run Code Online (Sandbox Code Playgroud)

这给了我一个语法错误。变量是逐字内插的,不进行计算。

另一种方法是根据表达式的输出设置变量:

\set minvalue (:servernum * :stride)
Run Code Online (Sandbox Code Playgroud)

但该\set语句不计算表达式。

postgresql psql sequence dynamic-sql ddl

4
推荐指数
1
解决办法
2169
查看次数

如何将外键约束到子集

我有一张桌子employee,他们每个人都可以扮演不同的角色,比如inspector constructor 。我还有另一张桌子,上面有一列,我可以在其中存储检查员在工作中的内容。

人们可以扮演不同的角色,但角色不一定要动态添加;为员工的每个角色设置一列就足够了。这也很方便,因为我们目前资源有限,而我们的用户使用 Postico 来维护数据(目前),因此最好使用简单的数据模型。有了外键,我们可以使用 Postico 的 1:N 选择器。

我试图为(物化)视图创建外键约束,但这不受 Postgresql 支持。此外,不允许使用以下外键:

FOREIGN KEY("inspector_id", TRUE) REFERENCES employee("id", "is_inspector")
Run Code Online (Sandbox Code Playgroud)

除了在多个表中复制数据之外,我还有其他选择吗?

postgresql

4
推荐指数
1
解决办法
1343
查看次数

位串上的 PostgreSQL 索引

在位串列上创建索引的最佳方法是什么?假设我有一个 type 列,bit(4)我想搜索所有设置了特定位的条目。所以如果我有条目:

bitfield | ...
--------------
1001
1010
0110
0010
0000 
Run Code Online (Sandbox Code Playgroud)

如果我试图搜索所有0010设置的条目,我可以轻松地做到这一点。但是我可以使用索引来优化搜索吗?

postgresql performance index postgresql-performance

4
推荐指数
1
解决办法
1983
查看次数