我在postgresql数据库中有54个表。并且大多数表格包括创建时间数据的日期。我想为所有表格创建全局触发器,其中包括CreatedDate列。并且这个触发器将在插入记录时更新列。所有包含创建日期的表的Postgresql触发器
1
A
回答
3
每个表都需要自己的触发器,但你可以使用一个单一的触发功能:
CREATE FUNCTION set_created_date() RETURNS trigger AS $$
BEGIN
NEW.createddate := CURRENT_TIME;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
对于每一个表,你应该有一个这样的触发器:
CREATE TRIGGER set_createddate
BEFORE INSERT ON <table name>
FOR EACH ROW EXECUTE PROCEDURE set_created_date();
您可以设定触发对于使用此代码的所有54个表格(首先创建触发器功能):
DO $$
DECLARE
t record;
BEGIN
FOR t IN
SELECT * FROM information_schema.columns
WHERE column_name = 'createddate'
LOOP
EXECUTE format('CREATE TRIGGER set_createddate
BEFORE INSERT ON %I.%I
FOR EACH ROW EXECUTE PROCEDURE set_created_date()',
t.schema_name, t.table_name);
END LOOP;
END;
$$ LANGUAGE plpgsql;
This obvio我们假定没有其他表中的列名为createddate
。这可以通过查询information_schema.columns
表格轻松检查。
0
对于帕特里克解决方案有问题的人。 这里有一些改进的代码:
DO $$
DECLARE
t text;
BEGIN
FOR t IN
SELECT table_name FROM information_schema.columns
WHERE column_name = 'createddate'
LOOP
EXECUTE format('CREATE TRIGGER set_createddate
BEFORE INSERT ON %I
FOR EACH ROW EXECUTE PROCEDURE set_created_date()',
t);
END LOOP;
END;
$$ LANGUAGE plpgsql;
+0
通常,如果解释代码要做什么,以及为什么解决问题而不引入其他问题,答案会更有帮助。 – Peter
相关问题
- 1. PostgreSQL - 包含日期
- 2. Postgresql:创建触发器
- 3. 创建一个包含文件名,创建日期,修改日期的列表
- 4. 所有表的SQL Server 2014修改日期触发器
- 5. PostgreSQL触发器创建问题
- 6. 在postgreSQL中创建触发器
- 7. MS-Access包含日期范围查询中的所有日期
- 8. cassandra触发器创建期间的java.lang.NoClassDefFoundError
- 9. PostgreSQL:如何获得包含结束日期的日期范围?
- 10. 创建在SQL Server中比较日期的触发器
- 11. MySQL:如何创建设置新行的创建日期的触发器
- 12. PostgreSQL触发器/确保日期过去的函数
- 13. 如果文件包含日期,如何创建日期类别?
- 14. 在Excel中创建一个包含日历日期的列
- 15. Postgresql触发器
- 16. 如何创建触发器以将日期时间拆分为日期
- 17. 表名称包含日期
- 18. groovy:创建一个包含所有字符串的值列表
- 19. 解析包含日期的JSON数据创建错误的日期对象
- 20. MySQL - 在插入之前创建触发器来替换日期
- 21. 创建触发器
- 22. 创建触发器
- 23. 创建触发器
- 24. Quartz.Net创建在多个特定日期时间触发的日程表
- 25. 更改触发器以使用在包含触发器的同一事务中创建的列更改
- 26. postgresql中的触发器
- 27. 如何创建日期范围,直到包含python dateutils的日期?
- 28. 包含日期的周数计数器
- 29. PostgreSQL日志触发优化
- 30. 将postgresql表中的所有日期更改为前一天
为什么不简单地将列更改为'default now()'? –
默认现在()适用于SQL插入查询。但我使用QGIS等第三方软件将记录插入表格。在这种情况下,新的记录是通过手工形式进行的。如果我手动忘记填充创建日期,则日期字段将变为空到数据库表。 – barteloma
好的。你为什么不试试问gis.stackexchange.com?肯定有这个解决方案。我怀疑qgis不能处理插入的默认值。 –