特定
=> select * from referenced;
referenced_id | name
---------------+-------
1 | one
2 | two
3 | three
Run Code Online (Sandbox Code Playgroud)
和
=> select * from entries;
entry_id | referenced_id | name
----------+---------------+------------------
1 | 3 | references three
Run Code Online (Sandbox Code Playgroud)
在哪里referenced_id和entry_id是主键.
entries如果entry_id已经存在或引用的项不存在,我想要一个insert语句来跳过该插入.第一个很容易做到:
INSERT INTO entries
VALUES (1, 2, 'references two')
ON CONFLICT (entry_id) DO NOTHING;
Run Code Online (Sandbox Code Playgroud)
是否有可能在这里检查是否存在外键?
我们将时间戳转换为纪元,对它们进行一些数学运算,然后将它们转换回时间戳.数据库中的所有时间都是TIMESTAMP WITHOUT TIME ZONE.
由于在英国时间切换到夏令时在一台服务器上关闭了一个小时但在另一台服务器上没有,所以我做了一点测试:
SHOW SERVER_VERSION;
SHOW TIMEZONE;
SELECT extract(EPOCH FROM TIMESTAMP '1970-01-01');
Run Code Online (Sandbox Code Playgroud)
我得到一台服务器
server_version
----------------
9.1.15
(1 row)
TimeZone
----------
GB
(1 row)
date_part
-----------
0
(1 row)
Run Code Online (Sandbox Code Playgroud)
但另一方面
server_version
----------------
9.3.6
(1 row)
TimeZone
----------
GB
(1 row)
date_part
-----------
-3600
(1 row)
Run Code Online (Sandbox Code Playgroud)
是否有任何服务器设置可能导致此问题?
或者extract在Postgres 9.1之后做出改变的行为?
我有以下两个表:
# select * from list;
list_id | name
---------+----------------------
9 | Popular
11 | Recommended
Run Code Online (Sandbox Code Playgroud)
和
# select * from list_item;
list_id | game_id | position
---------+---------+----------
11 | 2 | 0
9 | 10 | 1
11 | 5 | 1
11 | 4 | 4
11 | 6 | 2
11 | 7 | 3
9 | 3 | 0
Run Code Online (Sandbox Code Playgroud)
我希望每个列表都有一个游戏ID数组,如下所示:
list_id | name | game_ids
---------+-------------+------------
9 | Popular | {3,10}
11 | Recommended | {2,5,6,7,4} …Run Code Online (Sandbox Code Playgroud)