【问题标题】:Read and edit database dump file in Ruby在 Ruby 中读取和编辑数据库转储文件
【发布时间】:2019-08-03 00:55:22
【问题描述】:

我想将数据库转储导入到不包含旧数据库所有列的新数据库。

所以,要忽略/删除这些列,我的想法是编辑 dump.sql。

如何在 ruby​​ 中读取和编辑 sql 文件?

已创建转储:

pg_dump --data-only old_database > dump_data_12_3_2019.sql;

使用:

  • PostgreSQL 9.5
  • Ruby 2.5.1

内部sql文件:

COPY public.images (id, file, created_at, updated_at, rotation) FROM stdin;
255 31265d7843.JPG  2018-11-15 09:05:43.37898   2018-11-15 09:05:43.37898   0
256 78e834e4e7.JPG  2018-11-15 09:05:43.571389  2018-11-15 09:05:43.571389  0
257 7b6662659b.JPG  2018-11-15 09:05:44.275989  2018-11-15 09:05:44.275989  0
215 6fe307f4b5.jpg  2018-10-15 11:08:59.42583   2018-10-15 11:12:25.284024  0

标题以 COPY 开头,列名在 ( ) 内,数据在下方,以空格作为分隔符。

如何删除列旋转和他的数据?

【问题讨论】:

  • 您可以只转储您需要的表格。见stackoverflow.com/questions/7359827/…
  • 我不想转储特定的表。我想忽略或删除某些表中的列。
  • 将那些“旧”列添加到新数据库中可能最简单,这样您就可以最轻松地导入转储;然后删除这些列。
  • @CodyCaughlan 是的,我知道这一点。谢谢

标签: ruby


【解决方案1】:

您必须通过删除列(在新数据库中不可用)和这些列的数据来“更新”原始 sql 文件。

只需逐行读取,根据您的逻辑对其进行修改并写入其他文件。考虑到一些行是列信息,而其他行是数据。


path = '/tmp/source'
temp_file = Tempfile.new('output')
begin
  File.open(path, 'r') do |file|
    file.each_line do |line|
      # change the line according your logic
      temp_file.puts  new_line
    end
  end
  temp_file.close
ensure
  temp_file.close
  temp_file.unlink
end

之后,可以使用pg commands恢复目标文件。

psql -U <username> -d <dbname> -1 -f <filename>.sql

pg_restore -U <username> -d <dbname> -1 <filename>.dump

【讨论】:

  • 这就是我要找的。我会试试这个并输入我自己的转储脚本。谢谢
  • kuhinja,如果它对你有用,请接受答案。
【解决方案2】:

您需要打开文件 (1),分离命令 (2),然后执行一些操作来编辑 SQL 代码 (3),最后运行它 (4)。

contents = File.read('path/to/file.sql') # (1) If the file is huge, do not read it whole, but line by line
commands = contents.split(';') # (2) probably you'll need something more clever (hint: regex) because of the ; character in the data
commands.each do |command|
  stripped_command = strip_some_columns(command) # (3)
  ActiveRecord::Base.connection.execute(stripped_command) # (4)
end

【讨论】:

  • 我明白你想说什么,但是sql文件不能这样工作。我更新了我的问题。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 2011-07-24
相关资源
最近更新 更多