我有一个 heroku postgres 数据库,想将它迁移到 Amazon RDS 以节省成本。有什么方法可以最大限度地减少停机时间?通常这涉及实时复制数据库,然后将复制的 DB 提升为主 DB。
我知道我可以使用跟随者数据库在 heroku 中迁移数据库,我可以使用只读副本数据库在 Amazon RDS 中迁移数据库。是否有类似的方法来创建位于我自己的 Amazon RDS 中的 heroku DB 的数据库复制?
我们有一个相对较大的基于 postgres 的生产数据库:~20GB。PostgreSQL 数据库托管在 heroku 上。
我想将表数据的一小部分复制到我的本地数据库,这样我就可以对它们运行一些测试,而不必在生产中工作。
我不想自己生成示例数据,而是使用生产环境中已经存在的数据。
数据库中每个表的约 100 行就足够了。有没有简单的方法来实现这一点?
我在试图改变类型的列时,这个错误time
类型为timestamp
:
PG::CannotCoerce: ERROR: cannot cast type time without time zone to timestamp without time zone
Run Code Online (Sandbox Code Playgroud)
现有时间如何转换对我来说并不重要,但我确实需要更改此列。我怎么能强制这个或投这个?
这是 SQL 语句:
ALTER TABLE "students" ALTER COLUMN "time_since_missing_schedule_notification" TYPE timestamp USING CAST(time_since_missing_schedule_notification AS timestamp)
Run Code Online (Sandbox Code Playgroud)
我正在使用 Rails/ActiveRecord,这是生成上述 SQL 语句的 Ruby 代码:
change_column :students, :time_since_missing_schedule_notification, 'timestamp USING CAST(time_since_missing_schedule_notification AS timestamp without time zone)'
Run Code Online (Sandbox Code Playgroud)
当我连接到 Heroku 的 PostgreSQL 服务器时,我得到以下版本:
psql (9.3.1, server 9.2.7)
Run Code Online (Sandbox Code Playgroud) 出于开发目的,我们将生产数据库转储到本地。这很好,因为数据库足够小。公司在成长,我们希望降低风险。为此,我们希望在数据离开数据库服务器之前对其进行匿名化处理。
我们想到的一种解决方案是在 pg_dump 之前运行语句,但在同一个事务中,如下所示:
BEGIN;
UPDATE users
SET email = 'dev+' || id || '@example.com'
, password_hash = '/* hash of "password" */'
, ...;
-- launch pg_dump as usual, ensuring a ROLLBACK at the end
-- pg_dump must run with the *same* connection, obviously
-- if not already done by pg_dump
ROLLBACK;
Run Code Online (Sandbox Code Playgroud)
是否有现成的解决方案?我们的数据库托管在 Heroku 上,我们在转储方式上没有 100% 的灵活性。
我在下载和变体之前搜索了postgresql 匿名数据转储,但我没有看到任何高度相关的内容。