I suppose the simplest way is to let the tester use ssh
to login to your server. Then the tester's execution environment is whatever your server exposes through the shell. (I presume that would include psql
.)
As far as I know, all modern Unix derivatives install ssh by default. That would include Linux, Solaris, OS/X (Apple), and BSD. I believe that Windows does not ship with ssh, but Cygwin and PuTTY are commonly used to remedy that problem.
@joni correctly points out that pg_dump
is what you want. However, I recommend not doing a simple SQL dump. Instead, use a PostgreSQL "custom" format dump that can be fed into pg_restore
. This allows parallel dump/restore (faster) if you use directory format, but it's mostly useful because it offers control over the details of the restore without taking a new dump.
Custom-format dump/restore
For example, assuming you've already done a CREATE DATABASE
on the destination so there's an empty DB named mydb
there:
# dump the local db
pg_dump -Fc -o mydb.dump mydb
# restore to Amazon RDS
pg_restore -h my.amazon.host -U rds_superuser -d mydb --no-owner --no-privileges --no-tablespaces
Roles, tablespaces, foreign servers, GRANT
s, etc
Note that roles (users and groups) are not included in the dump. Neither are foreign data wrapper servers or some other global objects. Thus, things that depend on them will fail to restore. In the above I omit restoration of the owner and of privileges for that reason - meaning you'll need to redo your GRANT
s and REVOKE
s if you have non-default privileges in your database.
Similarly, all objects are restored to the default tablespace, because any tablespaces you may have locally won't be on RDS.
No remote access to rds_superuser
?
If you don't allow your rds_superuser
to log in remotely, but have done a GRANT rds_superuser TO myusername
for some other role, then instead of -U rds_superuser
above you can use:
-U myusername --role=rds_superuser
to get pg_restore
to authenticate as myusername
then SET ROLE rds_superuser;
.
Replication
Most production PostgreSQL database migrations are performed using replication and failover. This isn't currently possible with Amazon RDS. RDS does WAL archiving and streaming replication internally, but offers no way to get at the WAL archives or to create a replication
entry in pg_hba.conf
for replication for clients outside RDS.
For that reason, at time of writing you have to dump and reload to move data into or out of RDS. There's no low-downtime option.
Best Answer
The problem may be a namespace issue. You can
\dn
to list namespaces.Keep in mind that by default
\d
only lists relations in the search path, and you can runshow search_path
to see what this is.If you want to list relations in a namespace outside the search path, \d mynamespace.* will list them and their attributes. You can also:
To temporarily change the search path for purposes of using \d