最近我需要将 mysql 数据导入 Heroku 中的 postgres 数据库。实际上,它包括几个步骤:
在参考了很多材料并在github中测试了几个工具之后,我终于成功了。在这里,我想分享一些我的经验和参考资料。
答案 0 :(得分:1)
首先,我列出了一些将mysql数据库格式转换为postgresql格式的工具。
mysqldump -u username -p --compatible = postgresql databasename> outputfile.sql
然后使用转换器将数据传输到*.psql
文件。然后将新转储加载到新的PostgreSQL数据库中。
您已激活测试单元2.5.5,但您的Gemfile需要测试单元3.2.3。 #95
*.yml
文件进行配置,与上面的mysql2postgres类似。 README文件中有一个很好的参考表叫做数据类型转换图例,它比较了MySQL和PostgreSQL之间的不同数据类型。您可以手动修改数据类型。 ** This website列出了其他一些转换方法。
PostgreSQL中的一些基本操作:
$sudo su - postgres
$createtedb testdb
$psql testdb
=# create user username password ' password ';
-- To change a password:
=# alter role username password ' password ';
=# create database databasename with encoding 'utf8';
如何列出postgres中的所有数据库:PostgreSQL - SELECT Database
postgres-# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
testdb | postgres | UTF8 | C | C |
(4 rows)
postgres-#
现在输入以下命令来连接/选择所需的数据库,这里我们将连接到testdb数据库:
postgres=# \c testdb;
psql (9.2.4)
Type "help" for help.
You are now connected to database "testdb" as user "postgres".
testdb=#
创建数据库后,将转换后的表导入psql。请注意,在导入数据之前应该创建一个数据库。
$psql -h server -d databasename -U username -f data.sql
(有时在psql之前添加sudo -u postgres
)
如何使用pg_dump生成psql转储:creating dump file
$sudo -u postgres pg_dump -Fc --no-acl --no-owner -h localhost -U postgres databasename > mydb.dump
下一步,如何将数据导入Heroku Postgres? 在前面的步骤之后,您可能将导入数据导入本地PostgresSQL或生成pg_dump文件。这里将介绍两种方法将数据传输到远程Heroku Postgres。
使用pg_dump文件。reference
使用pg:backups restore
命令中的原始文件URL:
$ heroku pg:backups:restore 'https://s3.amazonaws.com/me/items/3H0q/mydb.dump' DATABASE_URL
在这种情况下,您应首先将转储文件上载到具有HTTP可访问URL的某个位置。 Heroku的开发中心recommend using Amazon S3。
DATABASE_URL
表示要还原到的数据库的HEROKU_POSTGRESQL_COLOR_URL
。例如,我的数据库url是postgresql-globular-XXXXX。
使用pg:push
pg:push
会将数据从本地psql数据库推送到远程Heroku Postgres数据库。该命令如下所示:
$heroku pg:push mylocaldb DATABASE_URL --app sushi
此命令将获取本地数据库“mylocaldb”并将其推送到应用程序“sushi”上DATABASE_URL
的数据库。请注意,在执行pg:push
之前,远程数据库必须为空,以防止意外的数据覆盖和丢失。
实际上我使用这个pg:push
方法并最终成功。
有关Heroku Postgres的更多信息,请参阅official document of Heroku。
**其他人:
heroku logs --tail
如何编写Django Apps的Procfile? Django项目的常见Procfile将如下所示:
web: gunicorn yourprojectname.wsgi --log-file -
此处Web是单一流程类型。我们需要修改的是yourprojectname.wsgi
。只需在前缀中替换您的项目名称。
如何将Gunicorn添加到您的应用程序中?
$ pip install gunicorn
$ pip freeze > requirements.txt
如何在远程Heroku服务器中运行命令行?
您可以在Heroku中执行bash
命令。
$heroku run bash
Running bash attached to terminal... up, run.1
~ $ ls
然后你可以像你当地的bash一样执行ls
,cd
这样的命令。
此外,您可以使用此模式中的命令在远程Heroku中执行manage.py
:heroku run python manage.py runserver