On 21 July 2017 at 07:09, Josh Berkus <j...@berkus.org> wrote: > All: > > The problem: > > postgres=# drop database bookdata; > ERROR: database "bookdata" is being accessed by other users > DETAIL: There is 1 other session using the database. > postgres=# \c bookdata > You are now connected to database "bookdata" as user "postgres". > bookdata=# drop subscription wholedb; > NOTICE: dropped replication slot "wholedb" on publisher > DROP SUBSCRIPTION > bookdata=# \c postgres > You are now connected to database "postgres" as user "postgres". > postgres=# drop database bookdata; > DROP DATABASE > > Is there any easy way for us to detect that the "user" accessing the > target database is actually a logical replication subscription, and give > the DBA a better error message (e.g. "database 'bookdata' still has open > subscrptions")? <http://www.postgresql.org/mailpref/pgsql-hackers>
Good idea. Also, this affects any active logical (db-specific) replication slot, not just built-in logical replication. CountOtherDBBackends reports prepared xacts separately already, and errdetail_busy_db uses that to report the two separately. Since we have slot attachment data I expect reporting attached replication slots would not be hard either; you might be able to prep a patch for that in a few hours. -- Craig Ringer http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services