如果表或字段/列当天未插入任何数据,有什么办法提醒我?
我有一些工作可以将数据自动插入到我的表中,但是如果不查询表就无法知道它是否确实在运行。
答案 0 :(得分:2)
..但是如果没有查询表就无法知道它是否真正运行了。
您可以查看postgresql的内部日志:
ALTER DATABASE your_database_name
SET log_statement = 'all';
或者更深入地研究它,然后像下面那样编辑postgresql.conf:
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
logging_collector = on
并重新启动postgresql
sudo service postgresql restart
或者您可以让您的工作/服务捕获sql查询的返回值,并在更适合您的需要时将其记录到文件中。
请记住,日志会随着时间的推移而变得很大(取决于查询频率)。
编辑
如Laurenz在他的评论中所述,最好使用
SET log_statement = 'mod';
以防它是“繁忙”的数据库。谢谢@Laurenz
答案 1 :(得分:0)
这是一个示例如何使用触发器实现这种事情的示例:
首先,我们要检查数据修改的表:
CREATE TABLE collected_values (
...
);
现在有了一个表,我们在其中记录数据修改(fillfactor
是为了使我们可以进行HOT更新并避免表膨胀,即使更改率很高):
CREATE TABLE last_updated (
updated_table regclass PRIMARY KEY,
mod_time timestamp with time zone NOT NULL
) WITH (fillfactor = 40);
INSERT INTO last_updated
VALUES ('collected_values'::regclass, '-infinity');
触发功能和触发:
CREATE FUNCTION record_mod() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
UPDATE last_updated
SET mod_time = current_timestamp
WHERE updated_table = TG_RELID;
RETURN NULL;
END;$$;
CREATE TRIGGER record_mod AFTER INSERT OR UPDATE OR DELETE ON collected_values
FOR EACH STATEMENT EXECUTE PROCEDURE record_mod();
现在last_updated
将始终包含表的最后修改时间。监视值以获得警报。