我已经在本地开发了一段时间,现在要将所有内容推送到生产环境。当然,我也在开发服务器上添加了数据,但没有考虑重新配置为Postgres。
现在我有一个SQLite数据库,其中的信息需要传输到远程VPS上的Postgres数据库中。
我尝试将其转储为.sql文件,但是Postgres报告了很多语法错误。有什么最好的方法可以解决这个问题呢?
我已经在本地开发了一段时间,现在要将所有内容推送到生产环境。当然,我也在开发服务器上添加了数据,但没有考虑重新配置为Postgres。
现在我有一个SQLite数据库,其中的信息需要传输到远程VPS上的Postgres数据库中。
我尝试将其转储为.sql文件,但是Postgres报告了很多语法错误。有什么最好的方法可以解决这个问题呢?
对于两个数据库之间的任何转换,选项如下:
从源数据库中进行仅架构的转储。手动转换并将其加载到目标数据库中。然后以源DB提供的最兼容的SQL转储形式进行数据转储。尝试将其加载到目标DB中。遇到问题时,使用sed/awk/perl或其他脚本转换转储,并重复尝试,直到加载并且结果匹配。
与(1)类似,手动转换架构。然后用您喜欢的语言编写一个脚本,连接到两个数据库,从其中一个SELECT,并插入到另一个中,可能需要对数据类型和表示进行一些转换。
使用ETL工具(例如Talend或Pentaho)连接到两个数据库并在它们之间进行转换。 ETL工具就像是(2)的“别人已经编写好了”版本,但可能需要一些学习成本。
希望您可以找到预先编写的转换工具。Heroku有一个称为 sequel
的工具可用于SQLite-> PostgreSQL;是否可以在没有Heroku和所有其他Heroku基础架构和代码的情况下使用?
在进行以上任何操作后,通常需要进行一些后转移步骤,例如使用 setval()
初始化序列。
Heroku 的数据库转换工具称为 sequel
。以下是你需要的 Ruby 宝石:
gem install sequel
gem install sqlite3
gem install pg
对于当前工作目录中命名为“tweets.db”的sqlite数据库文件,以下方法适用于我:
sequel -C sqlite://tweets.db postgres://pgusername:pgpassword@localhost/pgdatabasename
sqlite3
而不是 sqlite
。否则你会得到以下错误信息:Error: Sequel::AdapterNotFound: LoadError: cannot load such file -- sqlite3 <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in 'require'
。 - hrabancreate table localtbl as (select * from remotetbl)
将数据存储到实际的PG存储中。
CREATE TABLE
。(忘记我在那个上下文中说的关于 DML 的话吧。)只需确保 Pg 具有相同的模式--Pg 将使用一个序列来进行“自增”列--然后确保导入仅包含 DML(例如INSERT
)。 - user166390