Ruby on rails Rails ActiveRecord::Base.connection在外部文件上执行

Ruby on rails Rails ActiveRecord::Base.connection在外部文件上执行,ruby-on-rails,Ruby On Rails,运行加载已格式化的数据以加载到postgresql的一次性过程 BEGIN; INSERT INTO "public"."optionsets" [...] COMMIT; Rails具有允许执行原始sql的命令 ActiveRecord::Base.connection.execute() 然而,语法暗指将语法放在括号内,文档证实了这一点:“在该连接的上下文中执行SQL语句”。以下步骤失败 ActiveRecord::Base.connection.

运行加载已格式化的数据以加载到postgresql的一次性过程

BEGIN;
INSERT INTO "public"."optionsets" [...]
COMMIT;
Rails具有允许执行原始sql的命令

ActiveRecord::Base.connection.execute()
然而,语法暗指将语法放在括号内,文档证实了这一点:“在该连接的上下文中执行SQL语句”。以下步骤失败

ActiveRecord::Base.connection.execute(/Users/main/optionsets.sql)
SyntaxError ((irb):3: unknown regexp options - ma)

ActiveRecord::Base.connection.execute("/Volumes/main/optionsets.sql")
ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR:  syntax error at or near "/")
LINE 1: /Users/main/optionsets.sql

location = "/Volumes/main/optionsets.sql"
ActiveRecord::Base.connection.execute(location)
ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR:  syntax error at or near "/")
LINE 1: /Users/main/optionsets.sql

如何通过调用
.sql
文件
/[path\u to]/optionsets.sql
来实现这一点?

在上述场景中,读取文件不起作用,因此必须事先执行

file = File.read('/[path_to]/optionsets.sql')     
ActiveRecord::Base.connection.execute(file)

在上述情况下,读取文件不受影响,因此必须事先执行

file = File.read('/[path_to]/optionsets.sql')     
ActiveRecord::Base.connection.execute(file)

如果从命令行运行,那么Rails还有一个带有“db”别名的“dbconsole”命令,因此您可以执行类似的操作

rails db < /Volumes/main/optionsets.sql
rails db

如果从命令行运行,那么Rails也有一个带有“db”别名的“dbconsole”命令,因此您可以这样做

rails db < /Volumes/main/optionsets.sql
rails db

您必须先读取文件,不是吗?这不是说,
execute
将接收一个路径并读取您的文件,它接收一个字符串并执行它-这取决于您正在使用的适配器
file=file.read('/[path_to]/optionsets.sql')ActiveRecord::Base.connection.execute(file)
此外,您还可以为所需的sql创建迁移,即函数并将该函数作为执行参数调用您必须先读取该文件,不是吗?这不是说,
execute
将接收一个路径并读取您的文件,它接收一个字符串并执行它-这取决于您正在使用的适配器
file=file.read('/[path\u to]/optionsets.sql')ActiveRecord::Base.connection.execute(file)
此外,您还可以为所需的sql创建迁移,即函数并将该函数作为execute参数调用