我有一个运行良好的远程 PostgreSQL 实例在云 (Amazon RDS) 中运行。我想获得本地副本以进行开发。远程实例在 Ubuntu 上,我在 Mac 上本地使用 postgres.app。我采用了这种方法:
psql -h localhost -U <superuser> template1 -c 'CREATE DATABASE <thedbname>;'
pg_dump -U <remoteuser> -h <remotehost> <thedbname> | psql -h localhost -U <localsuperuser> <thedbname>
数据出现并加载。我添加了一个本地 djangouser 并将其放在我的 settings.py 中。当我尝试连接时,我收到了这条消息:
ProgrammingError: permission denied for relation django_site
我四处搜索然后应用了这个:
psql <mydbname> -c "GRANT ALL ON ALL TABLES IN SCHEMA public to <djangoappusername>;"
psql <mydbname> -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public to <djangoappusername>;"
psql <mydbname> -c "GRANT ALL ON ALL FUNCTIONS IN SCHEMA public to <djangoappusername>;"
这允许我“运行服务器”。我浏览该站点,所有数据都在那里,它速度极快,并且按预期运行。但后来我加载了 /admin/ 。. . 它的狗慢。我可以登录并四处走动,但从一个屏幕移动到另一个屏幕需要 90 秒(Chrome 在左下方显示“正在连接...”)。它不是一个非常大的数据库。除了 /admin/ 访问之外的一切都很棒。我确实删除了旧的 admin.pyc,没有效果。
我想知道的一件事是我使用的角色,我没有使用远程超级用户,我使用了在设置 PostgreSQL 的 RDS 实例时创建的角色,这就是 \du 的样子,并且我使用了第一个角色:
List of roles
Role name | Attributes | Member of
---------------+------------------------------------------------+-----------------
<remoteuser> | Create role, Create DB | {remotesuperu}
<remotesuperu>| Cannot login | {}
<rdsadmin> | Superuser, Create role, Create DB, Replication | {}
还有一件事,这些是我的本地角色,是数据库的所有者:
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
<djangou> | Create DB | {}
<superu> | Superuser, Create role, Create DB, Replication | {}
<dbowner> | Create role, Create DB, Cannot login | {}
任何人都对如何正确修复缓慢的管理员有任何想法,或者如果有更好的方法可以做到这一点,我会很高兴地放弃数据库并再次将它带过来。