- Dumping a Complete Cluster with pg_dumpall
- pg_dumpall is a utility for dumping all PostgreSQL DBs of a cluster into one file. It also dumps global objects that are common to all DBs:
--Backup the whole cluster of postgres database and give superuser password 10 time
-bash-3.2$ ./pg_dumpall -W > /opt/PostgresPlus/9.1AS/data/all.sql
Password:
Password:
Password:
Password:
Password:
Password:
Password:
Password:
Password:
Password:
-bash-3.2$ pwd
/opt/PostgresPlus/9.1AS/bin
-bash-3.2$ cd ../data
--List the backup file and read the the filie using tail -2
-bash-3.2$ ls -lrt|tail -2
-rw-r--r-- 1 enterprisedb enterprisedb 102468 Nov 9 14:27 all.sql
drwx------ 2 enterprisedb enterprisedb 4096 Nov 9 14:28 pg_stat_tmp
--
-- PostgreSQL database cluster dump
--
\connect edb
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
--
-- Roles
--
CREATE ROLE enterprisedb;
ALTER ROLE enterprisedb WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION PASSWORD 'md5517f3a577a9141b5d875bafafa5c686c';
CREATE ROLE group1;
ALTER ROLE group1 WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION;
CREATE ROLE lk;
ALTER ROLE lk WITH SUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN REPLICATION PASSWORD 'md57786f458677c72747a6fa1a3c7effff1';
CREATE ROLE rock;
ALTER ROLE rock WITH SUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION PASSWORD 'md5f4ba7703a0af45acbde31b65c19ef897';
CREATE ROLE sss1;
ALTER ROLE sss1 WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION PASSWORD 'md5b75db5a4df2ab1c8fce185e756578b62';
---- Role memberships
--
GRANT group1 TO enterprisedb GRANTED BY sss1
GRANT group1 TO sss1 GRANTED BY sss1;
--
-- Tablespaces
CREATE TABLESPACE tbs1 OWNER sss1 LOCATION '/u02/data';
--
-- Database creation
--
CREATE DATABASE era WITH TEMPLATE = template0 OWNER = lk;
REVOKE ALL ON DATABASE era FROM PUBLIC;
REVOKE ALL ON DATABASE era FROM lk;
GRANT ALL ON DATABASE era TO lk;
GRANT CONNECT,TEMPORARY ON DATABASE era TO PUBLIC;
GRANT ALL ON DATABASE era TO rock;
CREATE DATABASE etl WITH TEMPLATE = template0 OWNER = lk;
CREATE DATABASE ipl WITH TEMPLATE = template0 OWNER = enterprisedb;
CREATE DATABASE jk WITH TEMPLATE = template0 OWNER = rock;
CREATE DATABASE lol WITH TEMPLATE = template0 OWNER = rock;
CREATE DATABASE sssdb WITH TEMPLATE = template0 OWNER = sss1;
REVOKE ALL ON DATABASE template1 FROM PUBLIC;
REVOKE ALL ON DATABASE template1 FROM enterprisedb;
GRANT ALL ON DATABASE template1 TO enterprisedb;
GRANT CONNECT ON DATABASE template1 TO PUBLIC;
CREATE DATABASE wwe WITH TEMPLATE = template0 OWNER = rock;
--
-- EnterpriseDB database dump
--
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
--
-- Name: edb; Type: COMMENT; Schema: -; Owner: enterprisedb
--
COMMENT ON DATABASE edb IS 'default administrative connection database';
--
-- Name: _edb_scheduler; Type: SCHEMA; Schema: -; Owner: enterprisedb
--
CREATE SCHEMA _edb_scheduler;
ALTER SCHEMA _edb_scheduler OWNER TO enterprisedb;
CREATE TABLESPACE tbs1 OWNER sss1 LOCATION '/u02/data';
--
-- Database creation
--
CREATE DATABASE era WITH TEMPLATE = template0 OWNER = lk;
REVOKE ALL ON DATABASE era FROM PUBLIC;
REVOKE ALL ON DATABASE era FROM lk;
GRANT ALL ON DATABASE era TO lk;
GRANT CONNECT,TEMPORARY ON DATABASE era TO PUBLIC;
GRANT ALL ON DATABASE era TO rock;
CREATE DATABASE etl WITH TEMPLATE = template0 OWNER = lk;
CREATE DATABASE ipl WITH TEMPLATE = template0 OWNER = enterprisedb;
CREATE DATABASE jk WITH TEMPLATE = template0 OWNER = rock;
CREATE DATABASE lol WITH TEMPLATE = template0 OWNER = rock;
CREATE DATABASE sssdb WITH TEMPLATE = template0 OWNER = sss1;
REVOKE ALL ON DATABASE template1 FROM PUBLIC;
REVOKE ALL ON DATABASE template1 FROM enterprisedb;
GRANT ALL ON DATABASE template1 TO enterprisedb;
GRANT CONNECT ON DATABASE template1 TO PUBLIC;
CREATE DATABASE wwe WITH TEMPLATE = template0 OWNER = rock;
\connect edb
-
-- EnterpriseDB database dump
--
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
--
-- Name: edb; Type: COMMENT; Schema: -; Owner: enterprisedb
--
COMMENT ON DATABASE edb IS 'default administrative connection database';
--
-- Name: _edb_scheduler; Type: SCHEMA; Schema: -; Owner: enterprisedb
--
CREATE SCHEMA _edb_scheduler;
ALTER SCHEMA _edb_scheduler OWNER TO enterprisedb;
--
-- Name: dbms_job_procedure; Type: SCHEMA; Schema: -; Owner: enterprisedb
--
CREATE SCHEMA dbms_job_procedure;
ALTER SCHEMA dbms_job_procedure OWNER TO enterprisedb;
--
-- Name: SCHEMA dbms_job_procedure; Type: COMMENT; Schema: -; Owner: enterprisedb
--
COMMENT ON SCHEMA dbms_job_procedure IS 'dbms_job what procedures';
--
-- Name: enterprisedb; Type: SCHEMA; Schema: -; Owner: enterprisedb
--
CREATE SCHEMA enterprisedb;
ALTER SCHEMA enterprisedb OWNER TO enterprisedb;
--
-- Name: pgagent; Type: SCHEMA; Schema: -; Owner: enterprisedb
ALTER SCHEMA enterprisedb OWNER TO enterprisedb;
--
-- Name: pgagent; Type: SCHEMA; Schema: -; Owner: enterprisedb
--
CREATE SCHEMA pgagent;
ALTER SCHEMA pgagent OWNER TO enterprisedb;
--
-- Name: SCHEMA pgagent; Type: COMMENT; Schema: -; Owner: enterprisedb
--
COMMENT ON SCHEMA pgagent IS 'pgAgent system tables';
--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
--
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
--
COMMENT ON EXTENSION edb_dblink_oci IS 'EnterpriseDB Foreign Data Wrapper for Oracle';
SET search_path = dbms_job_procedure, pg_catalog, sys;
--
-- Name: run_job(integer, boolean); Type: PROCEDURE; Schema: dbms_job_procedure; Owner: enterprisedb
--
CREATE OR REPLACE PROCEDURE run_job(job integer, manual boolean DEFAULT false) AUTHID CURRENT_USER IS
$__sys__$
DECLARE
next_date timestamp;
err text;
errstate text;
jobowner text;
jobownerId oid;
whatProName text;
jobStartDate TIMESTAMP;
BEGIN
errstate := NULL;
jobStartDate := clock_timestamp::timestamp;
-- Fetch the job owner name and OID.
SELECT jobloguser, pg_catalog.pg_authid.oid INTO jobowner, jobownerId
FROM pgagent.pga_job, pg_catalog.pg_authid
WHERE jobid = job
AND jobjclid = (SELECT jclid FROM pgagent.pga_jobclass WHERE jclname = 'DBMS_JOB')
AND rolname = jobloguser
FOR SHARE;
BEGIN
-- 1) Validate that the 'what' procedure is sane and safe to invoke:
-- Check that the procedure is a
-- security definer procedure
-- owned by the job owner
-- has no arguments (they could have malicious DEFAULT expressions)
-- The pg_proc entry is locked (FOR SHARE) sto avoid the race condition
-- where the user could swap the original procedure with malicious one
-- just after we've run the check but before it's executed.
PERFORM * FROM pg_catalog.pg_proc
WHERE proname = 'job_' || job || '_what'
AND pronamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = 'dbms_job_procedure')
AND prosecdef
AND proowner = jobOwnerId
AND pronargs = 0 AND NOT proisagg AND NOT proretset
AND prorettype = 'pg_catalog.void'::regtype
AND protype = 1::char
FOR SHARE;
IF NOT SQL%FOUND THEN
raise 'Invalid what procedure' USING ERRCODE = 'syntax_error';
END IF;
-- 2) Set session authorization. This is just to set the search_path
-- to that of the user, it's not an effective security measure
-- because you can easily call RESET SESSION AUTHORIZATION to revert
-- it. We do this in LOCAL mode, so that it's automatically reverted
-- when we're done. Note that we're in a BEGIN ... EXCEPTION block,
-- IOW in a subtransaction, so the authorization will be revertd
-- as soon as we exit the block.
-- XXX: We can't do this if we're invoked from dbms_job.run(),
-- because you can't call SET SESSION AUTHORIZATION within a
-- security definer function, and dbms_job is a security definer
-- package.
IF NOT manual THEN
EXECUTE IMMEDIATE 'SET LOCAL SESSION AUTHORIZATION ' || quote_ident(jobowner);
END IF;
-- 3) execute the 'what' procedure
EXECUTE IMMEDIATE 'BEGIN dbms_job_procedure.job_' || job || '_what; END;';
EXCEPTION WHEN OTHERS THEN
-- At any exception, update job next run, COMMIT , raise error again
err := SQLERRM;
errstate := SQLSTATE;
END;
-- End of begin-exception-end block: this reverts the change in SESSION
-- AUTHORIZATION
BEGIN
-- Perform similar check to the interval-function that we did for
-- 'what'. Note that we have to do this *after* executing 'what',
-- because it could have replaced the 'interval' function with a
-- malicious one.
PERFORM * FROM pg_catalog.pg_proc
WHERE proname = 'job_' || job || '_interval'
AND pronamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = 'dbms_job_procedure')
AND prosecdef
AND proowner = jobOwnerId
AND pronargs = 0 AND NOT proisagg AND NOT proretset
AND prorettype = 'pg_catalog.timestamp'::regtype
AND protype = 0::char
FOR SHARE;
IF NOT SQL%FOUND THEN
raise 'Invalid interval function' USING ERRCODE = 'syntax_error';
END IF;
-- 4) Run the 'interval' function to get next_date
IF NOT manual THEN
EXECUTE IMMEDIATE 'SET LOCAL SESSION AUTHORIZATION ' || quote_ident(jobowner);
END IF;
EXECUTE IMMEDIATE 'SELECT dbms_job_procedure.job_' || job || '_interval' INTO next_date;
-- Just rethrow any error. The purpose of this EXCEPTION BLOCK is really
-- to just end the subtransaction and undo the change of SESSION
-- AUTHORIZATION
EXCEPTION WHEN OTHERS THEN
raise;
END;
-- 6) Update jobnextrun
IF next_date IS NULL THEN
UPDATE pgagent.pga_job SET jobnextrun = NULL, jobenabled = false WHERE jobid = job;
UPDATE pgagent.pga_job SET jobenabled = true WHERE jobid = job;
ELSE
-- Next_date should not be past date
IF (transaction_timestamp() - next_date > '1 SECS') THEN
-- Rollback what
err := 'Interval must evaluate to a time in the future';
ELSE
UPDATE pgagent.pga_job SET jobnextrun = next_date where jobid = job;
END IF;
END IF;
-- 7) insert log entry if run manually, pgagent takes care of this in scheduled runs
IF manual THEN
IF err IS NOT NULL THEN
INSERT INTO pgagent.pga_joblog (jlgjobid, jlgstatus, jlgstart, jlgduration)
VALUES (job, 'f', jobStartDate, (clock_timestamp - jobStartDate));
ELSE
INSERT INTO pgagent.pga_joblog (jlgjobid, jlgstatus, jlgstart, jlgduration)
VALUES (job, 's', jobStartDate, (clock_timestamp - jobStartDate));
END IF;
END IF;
-- If we got an error while running 'what', COMMIT the change to
-- jobnextrun and rethrow the error.
IF err IS NOT NULL THEN
COMMIT;
IF errstate IS NULL THEN
raise '%', err USING ERRCODE = 'syntax_error';
ELSE
raise '%', err USING ERRCODE = errstate;
END IF;
END IF;
END$__sys__$;
ALTER PROCEDURE dbms_job_procedure.run_job OWNER TO enterprisedb;
SET search_path = pgagent, pg_catalog, sys;
CREATE FUNCTION pga_schedule_trigger() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF TG_OP = 'DELETE' THEN
-- update pga_job from remaining schedules
-- the actual calculation of jobnextrun will be performed in the trigger
UPDATE pgagent.pga_job
SET jobnextrun = NULL
WHERE jobenabled AND jobid=OLD.jscjobid;
RETURN OLD;
ELSE
UPDATE pgagent.pga_job
SET jobnextrun = NULL
WHERE jobenabled AND jobid=NEW.jscjobid;
RETURN NEW;
END IF;
END;
$$;
ALTER FUNCTION pgagent.pga_schedule_trigger() OWNER TO enterprisedb;
--
-- Name: FUNCTION pga_schedule_trigger(); Type: COMMENT; Schema: pgagent; Owner: enterprisedb
--
COMMENT ON FUNCTION pga_schedule_trigger() IS 'Update the job''s next run time whenever a schedule changes';
--
-- Name: pgagent_schema_version(); Type: FUNCTION; Schema: pgagent; Owner: enterprisedb
--
CREATE FUNCTION pgagent_schema_version() RETURNS smallint
LANGUAGE plpgsql
AS $$
BEGIN
-- RETURNS PGAGENT MAJOR VERSION
-- WE WILL CHANGE THE MAJOR VERSION, ONLY IF THERE IS A SCHEMA CHANGE
RETURN 3;
END;
$$;
--Now Restore the cluster using pg_restore
bash-3.2$ ./pg_restore -d sssdb </opt/PostgresPlus/9.1AS/data/all.sql
pg_restore: [archiver] input file does not appear to be a valid archive
-bash-3.2$
-bash-3.2$ ./psql -p 5445 -f /opt/PostgresPlus/9.1AS/data/all.sql sssdb
password:
ENT
CREATE TRIGGER
COMMENT
CREATE TRIGGER
COMMENT
SET
CREATE TRIGGER
CREATE TRIGGER
SET
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
SET
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
SET
ALTER TABLE
ALTER TABLE
ALTER TABLE
REVOKE
REVOKE
GRANT
GRANT
REVOKE
REVOKE
GRANT
GRANT
REVOKE
REVOKE
GRANT
GRANT
REVOKE
REVOKE
GRANT
GRANT
REVOKE
REVOKE
GRANT
GRANT
REVOKE
REVOKE
GRANT
GRANT
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "era" as user "enterprisedb".
SET
SET
SET
SET
SET
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "etl" as user "enterprisedb".
SET
SET
SET
SET
SET
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "ipl" as user "enterprisedb".
SET
SET
SET
SET
SET
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "jk" as user "enterprisedb".
SET
SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "lol" as user "enterprisedb".
SET
SET
SET
SET
SET
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "sssdb" as user "enterprisedb".
SET
SET
SET
SET
SET
CREATE SCHEMA
ALTER SCHEMA
CREATE SCHEMA
ALTER SCHEMA
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
SET
ERROR: invalid value for parameter "default_tablespace": "tbs1"
DETAIL: Tablespace "tbs1" does not exist.
STATEMENT: SET default_tablespace = tbs1;
psql:/opt/PostgresPlus/9.1AS/data/all.sql:3297: ERROR: invalid value for parameter "default_tablespace": "tbs1"
DETAIL: Tablespace "tbs1" does not exist.
SET
CREATE TABLE
ALTER TABLE
SET
SET
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
SET
SET
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "template1" as user "enterprisedb".
SET
SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "wwe" as user "enterprisedb".
SET
SET
SET
SET
SET
CREATE SCHEMA
ALTER SCHEMA
CREATE SCHEMA
ALTER SCHEMA
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
SET
SET
SET
CREATE TABLE
ALTER TABLE
REVOKE
REVOKE
GRANT
GRANT
-bash-3.2$
-then check the cluster whether data is valid or not using \l,\dt,\dn,script....etc.
No comments:
Post a Comment