PostgreSQL 8.4.15执行GRANT语句报错:ERROR: syntax error at or near "ALL"
解决PostgreSQL 8.4.15批量授权语法报错问题
这个问题我太熟啦!你遇到的是PostgreSQL版本之间的语法兼容性坑——PostgreSQL 8.4.15不支持GRANT ... ON ALL TABLES/SEQUENCES IN SCHEMA这种批量授权语法,这个便捷的批量授权特性是直到PostgreSQL 9.0才正式引入的,所以在11.5这种高版本里能正常运行,老版本8.4就直接抛出语法错误了。
替代解决方案:手动生成并执行单对象授权语句
因为8.4不支持批量语法,我们只能通过动态生成每个表/序列的授权语句来实现同样的效果,下面分两种情况给出具体操作:
1. 给public schema下所有表授予SELECT权限
首先执行这条查询,生成所有需要的授权语句:
SELECT 'GRANT SELECT ON public.' || quote_ident(table_name) || ' TO consulta;' FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE';
查询结果会返回一堆类似GRANT SELECT ON public.users TO consulta;的语句,把这些结果复制出来直接执行就可以完成所有表的授权。
如果你不想手动复制执行,也可以创建一个PL/pgSQL函数来自动执行:
CREATE OR REPLACE FUNCTION grant_select_on_public_tables() RETURNS void AS $$ DECLARE rec RECORD; BEGIN FOR rec IN SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE' LOOP EXECUTE 'GRANT SELECT ON public.' || quote_ident(rec.table_name) || ' TO consulta;'; END LOOP; END; $$ LANGUAGE plpgsql; -- 调用函数完成授权 SELECT grant_select_on_public_tables(); -- 授权完成后可以删掉这个函数(可选) DROP FUNCTION grant_select_on_public_tables();
2. 给public schema下所有序列授予SELECT权限
和表的操作逻辑一样,先执行查询生成授权语句:
SELECT 'GRANT SELECT ON public.' || quote_ident(sequence_name) || ' TO consulta;' FROM information_schema.sequences WHERE sequence_schema = 'public';
复制结果执行即可。或者用自动执行的函数:
CREATE OR REPLACE FUNCTION grant_select_on_public_sequences() RETURNS void AS $$ DECLARE rec RECORD; BEGIN FOR rec IN SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = 'public' LOOP EXECUTE 'GRANT SELECT ON public.' || quote_ident(rec.sequence_name) || ' TO consulta;'; END LOOP; END; $$ LANGUAGE plpgsql; -- 调用函数完成授权 SELECT grant_select_on_public_sequences(); -- 可选:删除函数 DROP FUNCTION grant_select_on_public_sequences();
额外提醒
- 执行这些操作需要你拥有足够的权限(比如超级用户或者该表/序列的OWNER权限)
- 如果后续有新的表或序列被创建,8.4不会自动给
consulta授权,你需要重复上面的操作;要是长期维护的话,升级到9.0+版本后可以用ALTER DEFAULT PRIVILEGES设置默认权限,一劳永逸解决后续新对象的授权问题
内容的提问来源于stack exchange,提问作者jlemos
相关产品推荐
相关产品推荐

