dumped-schema with comments.sql
application/sql
Filename: dumped-schema with comments.sql
Type: application/sql
Part: 0
--
-- PostgreSQL database dump
--
-- Dumped from database version 14.4 (Ubuntu 14.4-1.pgdg22.04+1)
-- Dumped by pg_dump version 14.4 (Ubuntu 14.4-1.pgdg22.04+1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: users; Type: TABLE; Schema: public; Owner: timo
--
CREATE TABLE public.users (
id integer NOT NULL,
display_name character varying,
is_admin boolean
);
ALTER TABLE public.users OWNER TO timo;
--
-- Name: my_account(); Type: FUNCTION; Schema: public; Owner: timo
--
CREATE FUNCTION public.my_account() RETURNS public.users
LANGUAGE sql STABLE SECURITY DEFINER
AS $$
select *
from users
where cast(id as varchar) = current_setting('jwt.claims.sub', true)
-- The application will set the current user id at the begin of each transaction.
-- (See https://postgrest.org or https://graphile.org for example use cases.)
$$;
ALTER FUNCTION public.my_account() OWNER TO timo;
--
-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: timo
--
CREATE SEQUENCE public.users_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public.users_id_seq OWNER TO timo;
--
-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: timo
--
ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id;
--
-- Name: users id; Type: DEFAULT; Schema: public; Owner: timo
--
ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass);
--
-- Data for Name: users; Type: TABLE DATA; Schema: public; Owner: timo
--
COPY public.users (id, display_name, is_admin) FROM stdin;
\.
--
-- Name: users_id_seq; Type: SEQUENCE SET; Schema: public; Owner: timo
--
SELECT pg_catalog.setval('public.users_id_seq', 1, false);
--
-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: timo
--
ALTER TABLE ONLY public.users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
--
-- Name: users administrate_accounts; Type: POLICY; Schema: public; Owner: timo
--
CREATE POLICY administrate_accounts ON public.users USING ((EXISTS ( SELECT
FROM public.my_account() my_account(id, first_name, last_name, display_name, is_admin)
WHERE my_account.is_admin)));
-- BUG DESCRIPTION: Restoring this policy fails
-- --------------------------------------------
-- Original error message:
-- table "my_account" has 3 columns available but 5 columns specified
--
-- In line 110, pg_dump writes:
-- FROM public.my_account() my_account(id, first_name, last_name, display_name, is_admin)
--
-- Instead of this, I would expect an un-aliased function call, like this:
-- FROM public.my_account()
--
-- I exprect an un-aliased expression, because this would reproduce the code,
-- that I have actually written. The five-column alias resembles the table layout
-- at the time the policy was ADDED, because then the table had five columns.
--
-- However, before the policy was DUMPED, two of those columns had already been dropped.
-- So, if you still prefer the aliased version, a working table alias could look like:
-- FROM public.my_account() my_account(id, display_name, is_admin)
--
--
-- Name: users manage_my_account; Type: POLICY; Schema: public; Owner: timo
--
CREATE POLICY manage_my_account ON public.users USING ((id IN ( SELECT my_account.id
FROM public.my_account() my_account(id, first_name, last_name, display_name, is_admin))));
--
-- Name: users; Type: ROW SECURITY; Schema: public; Owner: timo
--
ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
--
-- PostgreSQL database dump complete
--