The above needs more information: 1) Are the dev_* databases on a different cluster?
2) If so did you run: CREATE ROLE prod_user; CREATE ROLE prod_and_dev_user; on that cluster first? I happened to put them all on the same cluster for my test case, in order to reproduce the unexpected behavior I encountered in the wild, where the prod and dev dbs happened to live on different clusters. In short, as long as you make sure the *prod_user* exists on the source cluster at the time when the dump is taken, and doesn't exist on the target cluster when the restore is carried out, you get the behavior I saw. Also if so: In the restores below are you sure you are pointed at the same cluster in each case? Yes, I am sure. Both for the test case I was creating for the mailing list, and for the script where I first encountered this in the wild. Worked like a charm when I used *psql*, didn't do what I expected when I used *pg_restore*. What do you see if you do: pg_restore -f prod_dump_restore.sql prod_dump.bin and look in prod_dump_res?tore.sql? This is exactly what I did when I was first trying to figure out what was going on. I see GRANT USAGE ON SCHEMA test TO prod_and_dev_user; GRANT ALL ON SCHEMA test TO prod_user; If I then use *psql* to load *prod_dump_restore.sql* to a cluster that doesn't have the *prod_user *role, I get the expected behavior ( *prod_and_dev_user* has usage on the schema *test*), because *psql* treats each of those statements as a separate command. *pg_restore* seems to treat them as a single command, judging by the error message and the behavior. Best, Sherrylyn