"CREATE RULE ... ON SELECT": redundant?
От | Ian Lawrence Barwick |
---|---|
Тема | "CREATE RULE ... ON SELECT": redundant? |
Дата | |
Msg-id | CAB8KJ=hDc48n0b03nacbzTC3GN28S6Pi7LV2826hP=rENYsn1g@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: "CREATE RULE ... ON SELECT": redundant?
|
Список | pgsql-hackers |
Hi Commit b23cd185f [1] forbids manual creation of ON SELECT rule on a table, and updated the main rules documentation [2], but didn't update the corresponding CREATE RULE page [3]. [1] https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=b23cd185fd5410e5204683933f848d4583e34b35 [2] https://www.postgresql.org/docs/devel/rules-views.html [3] https://www.postgresql.org/docs/devel/sql-createrule.html While poking around at an update for that, unless I'm missing something it is now not possible to use "CREATE RULE ... ON SELECT" for any kind of relation, given that it's disallowed on views / material views already. Assuming that's the case, that makes this useless syntax in a non-SQL-standard command, is there any reason to keep it in the grammar at all? Attached suggested patch removes it entirely and updates the CREATE RULE documentation. Apart from removing ON SELECT from the grammar, the main change is the removal of usage checks in DefineQueryRewrite(), as the only time it is called with the event_type set to "CMD_SELECT" is when a view/matview is created, and presumably we can trust the internal caller to do the right thing. I added an Assert in just in case, dunno if that's really needed. In passing, a redundant workaround for pre-7.3 rule names gets removed as well. I note that with or without this change, pg_get_ruledef() e.g. executed with: SELECT pg_get_ruledef(oid) FROM pg_rewrite WHERE ev_class='some_view'::regclass; emits SQL for CREATE RULE which can no longer be executed; I don't think there is anything which can be done about that other than noting it as a historical implementation oddity. Regards Ian Barwick
Вложения
В списке pgsql-hackers по дате отправления: