我试图通过检查其文件修改日期来了解我的表何时被修改,如本答案所述。但结果并不总是正确的。更新我的表后,文件修改日期会在几分钟内更新。这是正确的行为吗?PostgreSQL 是否将表修改存储在某些缓存中,然后将其刷新到硬盘驱动器?
那么,如何获得表格的正确上次修改日期(假设自动真空修改也可以)?
我在 Linux Centos 6.2 x64 下使用 PostgreSQL 9.2。
我在 PostgreSQL 中有一个表,它描述了一些具有开始日期和结束日期的事件:
CREATE TABLE my_table
(
event_id serial NOT NULL,
start_date timestamp without time zone NOT NULL,
end_date timestamp without time zone NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
单个事件可能与前一个和下一个事件重叠。在下表中,4 个事件中的前 3 个形成连续的时间间隔:
1 '2015-04-02 22:09:03' '2015-04-02 22:19:05'
2 '2015-04-02 22:17:38' '2015-04-02 22:27:38'
3 '2015-04-02 22:25:21' '2015-04-02 22:36:23'
4 '2015-04-02 22:45:23' '2015-04-02 22:55:23'
Run Code Online (Sandbox Code Playgroud)
是否可以编写一个查询来检查两个给定日期之间是否存在连续的日期间隔?
我想要一些类似的东西:
select ...
from my_table
where start_date > '2015-04-02' and end_date < '2015-04-06'
Run Code Online (Sandbox Code Playgroud) 我正在努力使用 PostgreSQL LISTEN - NOTIFY 机制。我打开两个控制台并使用 psql 客户端连接到我的数据库:
psql -U postgres test_db
Run Code Online (Sandbox Code Playgroud)
在第一个控制台中,我订阅了一些通知:
test_db=# listen event;
LISTEN
Run Code Online (Sandbox Code Playgroud)
在第二个控制台中,我尝试发送通知:
test_db=# notify event;
NOTIFY
Run Code Online (Sandbox Code Playgroud)
第一个控制台没有任何反应。但是,如果我从控制台 1 发送通知,我会收到它,并且还会从控制台 2 收到所有以前的通知。
我在 CentOS 6.5 x64 下使用 PostgreSQL 9.2.1。
我正在尝试在单个事务中执行 sql 脚本文件。该文件包含一些其他脚本的包含,这些脚本在我的示例中创建了一些表。它看起来像这样:
\include ../tables/table1.cre
\include ../tables/table2.cre
...
\include ../tables/table10.cre
Run Code Online (Sandbox Code Playgroud)
我正在使用psql
:
psql -X --set AUTOCOMMIT=off --set ON_ERROR_STOP=on -e --single-transaction -d my_db -f my_script.sql
Run Code Online (Sandbox Code Playgroud)
问题是 include meta 命令的错误不会导致事务回滚。例如,如果某些 tableX.cre 文件丢失,则将提交其包含之前的任何更改。但是,如果有一些 SQL 语法错误,一切都会按预期工作。
是否有可能以某种方式处理包含相关错误并回滚活动事务?
我正在使用 PostgreSQL 9.2.1。