Postgres 在解析时区时表现出一些奇怪的行为,或者我只是不明白它是如何工作的。
从文档:
Run Code Online (Sandbox Code Playgroud)SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'MST'; Result: 2001-02-16 18:38:40该示例采用 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) 这个问题已经被问过几次,甚至也得到了回答,但这对我没有帮助,这就是为什么我再次发布它。我有这个查询:
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 >..
我有一个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)
但是,如果我想要来自每个州的三个客户,有没有一种方法可以在不多次运行相同查询的情况下做到这一点?
我想复制 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)
有更好/更快的方法吗?
我有foo一个表中命名的列。我在脚本中构建了查询,使用这个名称。
我现在想将表中的列重命名为bar. 这将破坏脚本(有几个,但如有必要,可以更改它们)。该表被其他表引用。我想重命名,因为该列中存储的内容的上下文已更改。
一个列可以有两个名称吗?
我有一个带有 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/24583。links_grouptraffic是我的数据模型之一,并且time是该数据模型中的一个属性。
有人可以解释一下这意味着什么的背景,以及解决这个问题的方法吗?提前致谢!
我有时间戳(存储为 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)编写。我没有程序的源代码。
我已经用 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语句不计算表达式。
我有一张桌子employee,他们每个人都可以扮演不同的角色,比如inspector和 constructor 。我还有另一张桌子,上面有一列,我可以在其中存储检查员在工作中的内容。
人们可以扮演不同的角色,但角色不一定要动态添加;为员工的每个角色设置一列就足够了。这也很方便,因为我们目前资源有限,而我们的用户使用 Postico 来维护数据(目前),因此最好使用简单的数据模型。有了外键,我们可以使用 Postico 的 1:N 选择器。
我试图为(物化)视图创建外键约束,但这不受 Postgresql 支持。此外,不允许使用以下外键:
FOREIGN KEY("inspector_id", TRUE) REFERENCES employee("id", "is_inspector")
Run Code Online (Sandbox Code Playgroud)
除了在多个表中复制数据之外,我还有其他选择吗?
在位串列上创建索引的最佳方法是什么?假设我有一个 type 列,bit(4)我想搜索所有设置了特定位的条目。所以如果我有条目:
bitfield | ...
--------------
1001
1010
0110
0010
0000
Run Code Online (Sandbox Code Playgroud)
如果我试图搜索所有0010设置的条目,我可以轻松地做到这一点。但是我可以使用索引来优化搜索吗?
postgresql ×10
index ×2
ddl ×1
distinct ×1
dynamic-sql ×1
java ×1
performance ×1
psql ×1
replication ×1
sequence ×1
timestamp ×1
timezone ×1