Jac*_*sso 5 postgresql identity sequence nextval sql-grant
在我的 postgreSQL DB 应用程序中,我有时需要在运行插入之前检索序列的下一个值。\n我曾经通过向我的用户授予对此类序列的 \xe2\x80\x9cusage\xe2\x80\x9d 权限来实现此目的并使用 \xe2\x80\x9cnextval\xe2\x80\x9d 函数。\n我最近开始使用 \xe2\x80\x9cGENERATED BY DEFAULT AS IDENTITY\xe2\x80\x9d 列作为主键,我仍然能够检索nextval 作为超级用户,但我无法将此类权限授予其他用户。我的错误在哪里\xe2\x80\x99?
\n\n这是一个例子:
\n\n-- <sequence>\nCREATE SEQUENCE public.apps_apps_id_seq\n    INCREMENT 1\n    START 1\n    MINVALUE 1\n    MAXVALUE 9223372036854775807\n    CACHE 1;\n\nALTER SEQUENCE public.apps_apps_id_seq\n    OWNER TO postgres;\n\nGRANT USAGE ON SEQUENCE public.apps_apps_id_seq TO udocma;\n\nGRANT ALL ON SEQUENCE public.apps_apps_id_seq TO postgres;\n-- </sequence>\n\n-- <table>\nCREATE TABLE public.apps\n(\n    apps_id integer NOT NULL DEFAULT nextval(\'apps_apps_id_seq\'::regclass),\n    apps_born timestamp without time zone NOT NULL DEFAULT now(),\n    apps_vrsn character varying(50) COLLATE pg_catalog."default",\n    apps_ipad character varying(200) COLLATE pg_catalog."default",\n    apps_dscr character varying(500) COLLATE pg_catalog."default",\n    apps_date timestamp without time zone DEFAULT now(),\n    CONSTRAINT apps_id_pkey PRIMARY KEY (apps_id)\n)\nWITH (\n    OIDS = FALSE\n)\nTABLESPACE pg_default;\n\nALTER TABLE public.apps\n    OWNER to postgres;\n\nGRANT INSERT, SELECT, UPDATE, DELETE ON TABLE public.apps TO udocma;\n-- </table>\n客户端应用程序作为 \xe2\x80\x98udocma\xe2\x80\x99 连接,并且可以使用 \xe2\x80\x9c nextval \xe2\x80\x9d 函数来检索序列的下一个键。\n如果我使用相反,如果我以 postgres 身份登录,我仍然可以执行此操作,但是如果我以 udocma 身份登录,我不具有在 \xe2\x80\x9chidden\xe2\x80\x9d 序列上执行 nextval 的权限为标识列生成值。
\n\n比你。我意识到这些陈述
\n\nGRANT USAGE ON SEQUENCE public.apps_apps_id_seq TO udocma;\n和
\n\nselect nextval(\'apps_apps_id_seq\'::regclass);\n如果我将 apps.apps_id 定义为标识列而不是序列号,它们仍然可以工作。所以我猜想在名为“sometable”的表中定义为标识列的名为“somefield”的字段应该具有一些名为“sometable_somefiled_seq”的“隐藏”底层序列。这样对吗?
\n| 归档时间: | 
 | 
| 查看次数: | 4779 次 | 
| 最近记录: |