Thread: empty a database
Is there a neat way to clean out a database via SQL commands? i.e. get rid of tables, sequences, integers, etc. At present I'm using dropdb/createdb, but thats' far from ideal and I think it's causing postgres to do more mork than it needs to... -- 'My life, and by extension everyone else's, is meaningless.' -- Bender Rasputin :: Jack of All Trades - Master of Nuns
Dick Davies <rasputnik@hellooperator.net> writes: > Is there a neat way to clean out a database via SQL commands? > i.e. get rid of tables, sequences, integers, etc. > At present I'm using dropdb/createdb, but thats' far from ideal > and I think it's causing postgres to do more mork than it needs to... Well, if you put everything into one or a few schemas then dropping and recreating those schemas would do it. I suspect though that this is *not* faster than dropdb/createdb. regards, tom lane
* Tom Lane <tgl@sss.pgh.pa.us> [0232 16:32]: > Dick Davies <rasputnik@hellooperator.net> writes: > > Is there a neat way to clean out a database via SQL commands? > > i.e. get rid of tables, sequences, integers, etc. > > > At present I'm using dropdb/createdb, but thats' far from ideal > > and I think it's causing postgres to do more mork than it needs to... > > Well, if you put everything into one or a few schemas then dropping > and recreating those schemas would do it. I suspect though that this > is *not* faster than dropdb/createdb. Thanks Tom. It's not just the speed, it's the constant deletes and creations in ~pgsql/data - as I said the other day, this is recreating a test db from the production one as part of unit tests, so this happens dozens of times a day... -- '...and then we wrote scripts to write the configs for us, and using these scripts, we made mistakes in a faster, more automated manner.' -- A Gentle Introduction to Cricket, on MRTG configuration Rasputin :: Jack of All Trades - Master of Nuns
How about just truncating all the tables? Dick Davies wrote: > * Tom Lane <tgl@sss.pgh.pa.us> [0232 16:32]: > >>Dick Davies <rasputnik@hellooperator.net> writes: >> >>>Is there a neat way to clean out a database via SQL commands? >>>i.e. get rid of tables, sequences, integers, etc. >> >>>At present I'm using dropdb/createdb, but thats' far from ideal >>>and I think it's causing postgres to do more mork than it needs to... >> >>Well, if you put everything into one or a few schemas then dropping >>and recreating those schemas would do it. I suspect though that this >>is *not* faster than dropdb/createdb. > > > Thanks Tom. > > It's not just the speed, it's the constant deletes and creations in > ~pgsql/data - as I said the other day, this is recreating a test db from the > production one as part of unit tests, so this happens dozens of times a day... > > -- ------------------------------------------------------------------------- Naomi Walker Chief Information Officer Eldorado Computing, Inc. nwalker@eldocomp.com 602-604-3100 ------------------------------------------------------------------------- Courage is the power to let go the familiar. -Raymond Lindquist ------------------------------------------------------------------------- -- CONFIDENTIALITY NOTICE -- This message is intended for the sole use of the individual and entity to whom it is addressed, and may contain informationthat is privileged, confidential and exempt from disclosure under applicable law. If you are not the intendedaddressee, nor authorized to receive for the intended addressee, you are hereby notified that you may not use, copy,disclose or distribute to anyone the message or any information contained in the message. If you have received thismessage in error, please immediately advise the sender by reply email, and delete the message. Thank you.
If there are any foreign key constraints, you'll have to truncate the tables in the appropriate order. You would also have to reset the sequence values as well. Naomi Walker wrote: >How about just truncating all the tables? > > >Dick Davies wrote: > > >>* Tom Lane <tgl@sss.pgh.pa.us> [0232 16:32]: >> >> >> >>>Dick Davies <rasputnik@hellooperator.net> writes: >>> >>> >>> >>>>Is there a neat way to clean out a database via SQL commands? >>>>i.e. get rid of tables, sequences, integers, etc. >>>> >>>> >>>>At present I'm using dropdb/createdb, but thats' far from ideal >>>>and I think it's causing postgres to do more mork than it needs to... >>>> >>>> >>>Well, if you put everything into one or a few schemas then dropping >>>and recreating those schemas would do it. I suspect though that this >>>is *not* faster than dropdb/createdb. >>> >>> >>Thanks Tom. >> >>It's not just the speed, it's the constant deletes and creations in >>~pgsql/data - as I said the other day, this is recreating a test db from the >>production one as part of unit tests, so this happens dozens of times a day... >> >> >> >> > > > >
Clinging to sanity, rasputnik@hellooperator.net (Dick Davies) mumbled into her beard: > Is there a neat way to clean out a database via SQL commands? > > i.e. get rid of tables, sequences, integers, etc. > > At present I'm using dropdb/createdb, but thats' far from ideal > and I think it's causing postgres to do more mork than it needs to... If you truly need for all of the objects to go away, dropping the database seems like a reasonable way to do this. I'm not sure what work you are imagining is "too much" or "unnecessary." If you're regularly recreating a not-totally-empty database, containing some set of "fresh" tables/sequences/views/such, then I'd think you're doing the right thing, but need to take a further step... If you're recreating a database that has some non-zero "initial configuration," then what you might do is to set up a 'template' database, let's call it "mytemplate" that contains that configuration. Then you can do the following: $ createdb --template=mytemplate mydatabase CREATE DATABASE $ do_some_work_with mydatabase $ dropdb mydatabase DROP DATABASE $ createdb --template=mytemplate mydatabase CREATE DATABASE $ do_some_work_with mydatabase $ dropdb mydatabase DROP DATABASE $ createdb --template=mytemplate mydatabase CREATE DATABASE $ do_some_work_with mydatabase $ dropdb mydatabase DROP DATABASE $ createdb --template=mytemplate mydatabase CREATE DATABASE $ do_some_work_with mydatabase $ dropdb mydatabase DROP DATABASE $ createdb --template=mytemplate mydatabase CREATE DATABASE $ do_some_work_with mydatabase $ dropdb mydatabase DROP DATABASE -- If this was helpful, <http://svcs.affero.net/rm.php?r=cbbrowne> rate me http://linuxdatabases.info/~cbbrowne/slony.html "Wintel: A Wasteland of Useless Software - If the bazillions of programs out there actually amount to something, why is everyone using MICROS~1 Office, Word, Excel, PowerPoint, Access, ..." -- cbbrowne@hex.net
* Christopher Browne <cbbrowne@acm.org> [0223 20:23]: > Clinging to sanity, rasputnik@hellooperator.net (Dick Davies) mumbled into her beard: > > Is there a neat way to clean out a database via SQL commands? > > > > i.e. get rid of tables, sequences, integers, etc. > > > > At present I'm using dropdb/createdb, but thats' far from ideal > > and I think it's causing postgres to do more mork than it needs to... > > If you truly need for all of the objects to go away, dropping the > database seems like a reasonable way to do this. I'm not sure what > work you are imagining is "too much" or "unnecessary." It just seems a bit extreme, but the alternatives are all a bit gnarly, so think I'll live with it.... Thanks for all the suggestions, though, everybody. -- 'The old 'give em a Linux box and they think they're Jean-Luc Picard' syndrome.' -- Pete Bentley Rasputin :: Jack of All Trades - Master of Nuns