It is unclear whether you want to just update the rows or also select them at the same time, or even insert new rows. Updating is very simple:
UPDATE tbl
SET col1 = col1*10
,ts = ts + interval '1 day'
To also return all rows like a SELECT
statement would (the updated state!):
UPDATE tbl
SET col1 = col1*10
, ts = ts + interval '1 day'
RETURNING *
If you actually want to INSERT
new rows with just one column changed and the timestamp changed, and the point is to avoid having to type out all 33 columns, you could:
CREATE TEMP TABLE tbl_tmp AS SELECT * FROM tbl;
UPDATE tbl_tmp SET col1 = col1*10, ts = ts + interval '1 day';
INSERT INTO tbl SELECT * FROM tbl_tmp;
DROP tbl_tmp;
OR somewhat faster with the new writable CTEs in version 9.1:
CREATE TEMP TABLE ON COMMIT DROP tbl_tmp AS SELECT * FROM tbl;
WITH x AS (
UPDATE tbl_tmp SET col1 = col1*10, ts = ts + interval '1 day'
RETURNING *
)
INSERT INTO tbl SELECT * FROM x;
DROP tbl_tmp;
Be sure to have autovacuum running or run VACUUM ANALYZE manually afterwards.