Re: UPDATE many records
Israel Brewster <[email protected]> Tue, 7 Jan 2020 12:59:55 -0900
| Newsgroups | gmane.comp.db.postgresql.general |
|---|---|
| Message-ID | <[email protected]> |
>=20 > On Jan 7, 2020, at 12:57 PM, Adrian Klaver <[email protected]> = wrote: >=20 > On 1/7/20 1:43 PM, Israel Brewster wrote: >>> On Jan 7, 2020, at 12:21 PM, Adrian Klaver = <[email protected] <mailto:[email protected]>> wrote: >>>=20 >>> On 1/7/20 1:10 PM, Israel Brewster wrote: >>>>> On Jan 7, 2020, at 12:01 PM, Adrian Klaver = <[email protected] <mailto:[email protected]>> wrote: >>>>>=20 >>>>> On 1/7/20 12:47 PM, Israel Brewster wrote: >>>>>> One potential issue I just thought of with this approach: disk = space. Will I be doubling the amount of space used while both tables = exist? If so, that would prevent this from working - I don=E2=80=99t = have that much space available at the moment. >>>>>=20 >>>>> It will definitely increase the disk space by at least the data in = the new table. How much relative to the old table is going to depend on = how aggressive the AUTOVACUUM/VACUUM is. >>>>>=20 >>>>> A suggestion for an alternative approach: >>>>>=20 >>>>> 1) Create a table: >>>>>=20 >>>>> create table change_table(id int, changed_fld some_type) >>>>>=20 >>>>> where is is the PK from the existing table. >>>>>=20 >>>>> 2) Run your conversion function against existing table with change = to have it put new field value in change_table keyed to id/PK. Probably = do this in batches. >>>>>=20 >>>>> 3) Once all the values have been updated, do an UPDATE set = changed_field =3D changed_fld from change_table where existing_table.pk = =3D change_table.id <http://change_table.id>; >>>> Makes sense. Use the fast SELECT to create/populate the other = table, then the update can just be setting a value, not having to call = any functions. =46rom what you are saying about updates though, I may = still need to batch the UPDATE section, with occasional VACUUMs to = maintain disk space. Unless I am not understanding the concept of = =E2=80=9Ctuples that are obsoleted by an update=E2=80=9D, which is = possible. >>>=20 >>> You are not. For a more thorough explanation see: >>>=20 >>> = https://www.postgresql.org/docs/12/routine-vacuuming.html#VACUUM-BASICS >>>=20 >>> How much space do you have to work with? >>>=20 >>> To get an idea of the disk space currently used by table see; >>>=20 >>> = https://www.postgresql.org/docs/12/functions-admin.html#FUNCTIONS-ADMIN-DB= OBJECT >> Oh, ok, I guess I was being overly paranoid on this front. Those = functions would indicate that the table is only 7.5 GB, with another = 8.7GB of indexes, for a total of around 16GB. So not a problem after all = - I have around 100GB available. >> Of course, that now leaves me with the mystery of where my other = 500GB of disk space is going, since it is apparently NOT going to my DB = as I had assumed, but solving that can wait. >=20 > Assuming you are on some form of Linux: >=20 > sudo du -h -d 1 / >=20 > Then you can drill down into the output of above. Yep. Done it many times to discover a runaway log file or the like. Just = mildly amusing that solving one problem leads to another I need to take = care of as well=E2=80=A6 But at least the select into a new table should = work nicely. Thanks! --- Israel Brewster Software Engineer Alaska Volcano Observatory=20 Geophysical Institute - UAF=20 2156 Koyukuk Drive=20 Fairbanks AK 99775-7320 Work: 907-474-5172 cell: 907-328-9145 >=20 >> Thanks again for all the good information and suggestions! >> --- >> Israel Brewster >> Software Engineer >> Alaska Volcano Observatory >> Geophysical Institute - UAF >> 2156 Koyukuk Drive >> Fairbanks AK 99775-7320 >> Work: 907-474-5172 >> cell: 907-328-9145 >>>=20 >>>>>=20 >>>>>> --- >>>>>> Israel Brewster >>>>>> Software Engineer >>>>>> Alaska Volcano Observatory >>>>>> Geophysical Institute - UAF >>>>>> 2156 Koyukuk Drive >>>>>> Fairbanks AK 99775-7320 >>>>>> Work: 907-474-5172 >>>>>> cell: 907-328-9145 >>>>>=20 >>>>>=20 >>>>> -- >>>>> Adrian Klaver >>>>> [email protected] <mailto:[email protected]> >>>=20 >>>=20 >>> -- >>> Adrian Klaver >>> [email protected] <mailto:[email protected]> >=20 >=20 > --=20 > Adrian Klaver > [email protected]