事实证明,还原后应将数据库中所有对象的显式所有权授予所有者。所有者不是超级用户。仅在数据库创建时设置所有者是不够的。迁移的最终解决方案是这样的:
在客户端上:
pg_dump -f dump.sql -Ox database
在服务器上:
su postgres
dropdb database
createdb database -O user
psql database -f dump.sql
然后设置特权:
psql database -c "GRANT ALL ON ALL TABLES IN SCHEMA public to user;"
psql database -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public to user;"
psql database -c "GRANT ALL ON ALL FUNCTIONS IN SCHEMA public to user;"