PostgreSQL运行含GRANT SELECT的SQL时报IN附近语法错误如何解决?
错误原因
- 最直接的触发原因:
CREATE TABLE AS语句结尾没有加分号做语句分隔,数据库解析时会把后面的GRANT语句当成CREATE TABLE语句的一部分,直接触发语法错误。 - GRANT语句本身存在语法错误:单表授权不支持
IN SCHEMA写法,该语法仅用于批量授权场景(比如给某个schema下的所有表授权)。单表指定schema只需把schema名缀在表名前即可。
修复后的完整SQL脚本
DROP TABLE IF EXISTS abc; CREATE TABLE abc AS SELECT title FROM people WHERE title like 'ram%'; -- 补充分号分隔语句 -- 两种正确的单表授权写法二选一即可 -- 写法1:直接缀schema到表名,适配不同schema下的同名表场景 GRANT SELECT ON public.abc TO ram; -- 写法2:当前会话默认schema就是public的话,可省略schema前缀 -- GRANT SELECT ON abc TO ram;
内容的提问来源于stack exchange,提问作者Azima
相关产品推荐
相关产品推荐

