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