Re: alter table set TABLE ACCESS METHOD
От | Jeff Davis |
---|---|
Тема | Re: alter table set TABLE ACCESS METHOD |
Дата | |
Msg-id | 1033d6b4b5b42a014cc3f617265ae6e61cb5781b.camel@j-davis.com обсуждение исходный текст |
Ответ на | Re: alter table set TABLE ACCESS METHOD (Justin Pryzby <pryzby@telsasoft.com>) |
Ответы |
Re: alter table set TABLE ACCESS METHOD
|
Список | pgsql-hackers |
On Thu, 2021-05-06 at 15:23 -0500, Justin Pryzby wrote: > I think ALTER TABLE SET ACCESS METHOD should move all data off the > old AM, > including its toast table. Can you explain what you mean, and why? I'm still confused. Let's say there are 4 table AMs: A, AT, B, and BT. A's relation_toast_am() returns AT, and B's relation_toast_am() returns BT. AT or BT are invalid if A or B have relation_needs_toast_table() return false. Here are the cases that I see: If A = B, then AT = BT, and it's all a no-op. If A != B and BT is invalid (e.g. converting heap to columnar), then A should detoast (and perhaps decompress, as in the case of columnar) whatever it gets as input and do whatever it wants. That's what columnar does and I don't see why ATRewriteTable needs to handle it. If A != B and AT != BT, then B needs to detoast whatever it gets (but should not decompress, as that would just be wasted effort), and then re-toast using BT. Again, I don't see a need for ATRewriteTable to do anything, B can handle it. The only case I can really see where ATRewriteTable might be helpful is if A != B but AT = BT. In that case, in theory, you don't need to do anything to the toast table, just leave it where it is. But then the responsibilities get a little confusing to me -- how is B supposed to know that it doesn't need to toast anything? Is this the problem you are trying to solve? Regards, Jeff Davis
В списке pgsql-hackers по дате отправления: