我正在寻找一种有效的方法来获取一个原始的sql文件,并在postgres数据库中同步执行,类似于通过psql
运行它。
我有一个sql文件,它创建所有数据库,导入数据等。我需要使用node.js执行此操作,但找不到任何自动执行此操作的模块。对于node.js应用程序本身,我们使用node-postgres('pg'),knex.js和bookshelf.js。我认为pg最适合此操作。
我能想到的一个替代方案是读取整个文件,用空格分割它,用空格替换换行符,修剪任何重复的空格,然后以顺序执行的方式将其逐个送入pg,如果这真的是最有效的方法,而且还没有库可以解决这个问题,我有点惊讶。本身就有点挑战性,我可能会不小心把它捣碎。
提前澄清一下:
- 无法使用
psql
,因为它未安装在目标计算机上 - 我选择以SQL原生形式开发SQL语句并对其进行源代码控制,因为DBA使用和操作它要容易得多
5条答案
按热度按时间bvjveswy1#
在传递给
client.query
时,您可以使用一个分隔符来分隔后续查询这是可行的:
字符串
因此,这也起作用:
型
4xy9mtcn2#
我已经写了下面的函数,它适用于我的情况。如果没有的话,它会简单得多:
batch
管理并发代码片段:
字符串
请注意,如果您在任何地方使用SQL语句,除了终止SQL语句之外,这将失败。
ybzsozfc3#
@databases/pg
客户端支持立即运行SQL文件:字符串
它还支持在对
db.query
的单个调用中包含多个语句:型
在此范例中,会依序执行每个陈述式,并传回最后一个陈述式的结果。
yk9xbfzb4#
下面的代码,它只是将一个文件读入一个字符串,然后使用
query
运行它,似乎对我有用:字符串
如果它也有帮助,这里是进一步的代码,以按字母顺序运行目录中的所有“*.sql”文件:
型
(Don不要忘记在这之后的某个时候使用
await dbClient.end()
关闭客户端连接)。db2dz4w85#
有很多方法可以通过SQL文件导入数据库,最简单快捷的方法是在保存文件的cmd中运行此命令:
字符串
或者你可以通过node.js读取和解析文件,然后运行它,但这需要时间。
型