Update: In PostgreSQL 9.5+ there is ALTER TABLE ... SET LOGGED
and ... SET UNLOGGED
Converting from UNLOGGED
to LOGGED
requires that the whole table's data be written to xlogs if wal_level
is > minimal
so replicas get a copy. So it's not free, but it can still be worth creating a table unlogged, populating it then setting it logged if you have a bunch of cleanup and deletion and merging work to do on the table after initial load.
Yes, that's still the case in 9.4.
Converting from logged to UNLOGGED
isn't theoretically hard AFAIK, but nobody's done the work to do it. The main thing is that all constraints and types etc referring to it must be re-checked to make sure there's no reference from another logged table to this table. Most attention has been paid to the other case, so if this feature is important to you, consider funding its development or getting involved in development yourself.
Converting UNLOGGED
to logged may become possible for nodes that aren't involved in streaming replication or using an archive_command
. It's not simple otherwise because of the need to cope with the fact that the data for the table wasn't sent, but suddenly changes to it are - the replication protocol would need further enhancement to allow the table to be base-copied before continuing.