Postgresql 将更新的文件导入数据库

Postgresql 将更新的文件导入数据库,postgresql,streaming,data-access-layer,notify,listen,Postgresql,Streaming,Data Access Layer,Notify,Listen,我的文件每2小时更新一次。我必须自动检测文件并将提取的信息插入数据库 我们的数据库管理系统是Postgresql,编程语言是Python。你建议我怎么做 我想使用DAL(数据库抽象层)在文件和数据库之间建立连接,并使用postgresqlLISTEN/NOTIFY技术检测新文件。如果您同意我的意见,请告诉我如何使用侦听/通知功能来检测文件 谢谢您不能使用LISTEN/NOTIFY,因为它只能从数据库中发送消息,而您的文件显然不在其中 您需要让python脚本扫描文件所在的目录,并检查它们的修改时

我的文件每2小时更新一次。我必须自动检测文件并将提取的信息插入数据库

我们的数据库管理系统是Postgresql,编程语言是Python。你建议我怎么做

我想使用DAL(数据库抽象层)在文件和数据库之间建立连接,并使用postgresql
LISTEN
/
NOTIFY
技术检测新文件。如果您同意我的意见,请告诉我如何使用
侦听
/
通知
功能来检测文件


谢谢

您不能使用LISTEN/NOTIFY,因为它只能从数据库中发送消息,而您的文件显然不在其中


您需要让python脚本扫描文件所在的目录,并检查它们的修改时间(mtime)。如果它们被更新,您需要读入文件,解析数据并将其插入数据库。如果不知道文件的格式,就没有办法更具体了。

您需要的是编写一个脚本,在文件更改时使用文件系统notify API运行回调函数,使其保持运行状态。当脚本收到文件更改的通知时,它应该连接到PostgreSQL并执行所需的工作,然后返回睡眠状态,等待下一次更改

监视目录更改的唯一真正跨平台方法是使用延迟循环轮询
os.listdir
os.stat
以检查新文件和更新的修改时间。这是对电源和磁盘I/O的浪费;对于大文件集,速度也会变慢。如果您的操作系统在目录中的文件发生更改时可靠地更改了目录修改时间,您可以通过延迟循环
OS.stat
来更改目录,这会有所帮助

最好使用特定于操作系统的通知API。如果您使用Java,我会告诉您使用NIO2,它可以为您处理所有的平台细节。它似乎可以为Python提供类似的功能,但我在Python编码中不需要做目录更改通知,所以我没有测试它。如果不成功,您可以使用特定于平台的技术,如Linux的inotify/dnotify,以及Windows的各种watcher API

另见:


谢谢你,理查德。我知道文件格式,知道如何将其转换为简单的文本文件。问题是检测新更新的文件。psycopg或database abstraction layer(DAL)是否可以作为Python的数据库连接器?无论您如何连接到PostgreSQL,这都不会告诉您任何有关无关文件的信息。可能有一个库可以为您完成这项工作,但除此之外,只需扫描目录中的文件并检查时间戳即可。睡60秒,重复一遍……谢谢。你知道如何扫描新文件吗?任何Python入门指南都应该涵盖这类内容。如果你还不知道一个好的指南会被证明是有用的。这个问题也是@用户1043898,在其他地方重新发布时,请链接回一个SO问题,或者至少提及您已重新发布。似乎这个问题实际上是重复的,我只是刚刚注意到。谢谢Craig。这是非常有益的。若我选择使用特定于平台的技术,我是否可以将它们合并到python环境中,或者我应该使用操作系统的命令行?@user1043898您还并没有说您使用的是什么操作系统,这使得回答起来更加困难。请使用操作系统更新您的问题。您完全可以使用Python中特定于平台的目录监视功能,尽管如果它们只能作为C API直接提供,可能需要一些跳跃。谷歌快速搜索发现了Python的inotify模块,对于Windows,目前我的操作系统显然是Windows,但如果必要的话,我可以切换到Linux。@user1043898看起来有一些很好的信息——对于这两种平台,正如它所发生的那样——在。在这和我已经给你的链接之间,我希望你能找到答案。