Thread: How to drop automatically some databases?
I've got a developer PC (Windows) that hosts copies of a production database so I can tinker with it without causing damage to the production database. Every night a script fetches a dump of the production database. Then it renames the test-db on my PC, creates a new test-db and imports the dump. The current version is named "db_test". The older copies are named "db_test_yymmdd_hhmm". The name is extended with the timestamp of the import. Now I'd like to keep just 3 older copies in case I want to look up structural moifications I've made the day before. Older copies should get dropped. This would show the names to drop. select datname from ( select datname from pg_database where datname ilike 'db_test_%' order by datname ) as x EXCEPT select datname from ( select datname from pg_database where datname ilike 'db_test_%' order by datname desc limit 3 ) as y; I tried to run this drop database ( ... the select above ... ) in the DB "postgres" but it didn't work. After a couple of seconds I get a syntax error. What now? :}
On Saturday, April 25, 2015, Andreas <maps.on@gmx.net> wrote:
drop database ( ... the select above ... )
in the DB "postgres" but it didn't work.
After a couple of seconds I get a syntax error.
What now? :}
You have to use dynamic sql - either using plpgsql so something in your client of choice (e.g. psql). Drop database is DSL and does not accept database names as parameters or via column references.
David J.