postgreSQL从一台服务器转储和恢复分区表(带插入触发器)到另一台服务器

时间:2015-12-28 15:12:29

标签: postgresql

尝试在PostgreSQL(9.4.5)中将分区表从一台服务器转储到另一台服务器。 postgres相当新,并继承了该项目,如果需要更多背景信息,请告诉我。

dbname=> SELECT COUNT (id) FROM parent_table_to_copy;
count  
--------
499992
(1 row)

parent_table_to_copy有一个触发器:

parent_table_to_copy_trigger BEFORE INSERT ON parent_table_to_copy FOR EACH ROW EXECUTE PROCEDURE parent_table_to_copy_function()

可能不重要,但该函数是一系列ELSIF,它按parent_table_to_copy列的记录的第一个字母按字母顺序将name分成26个子项。例如,如果我想要nameparent_table_to_copy以“A”开头的所有记录,则会返回一个子集:

dbname=> SELECT COUNT(id) FROM child_table_a;
count 
-------
34064
(1 row)

现在转储/恢复到 hostname2 上的数据库备份 我使用--inserts因为上面描述的 insert 触发器,不认为默认的COPY语句会起作用。

pg_dump --host=hostname1 --username=user --table="parent_table_to_copy" --inserts --data-only --file=dump_out.sql dbname

dump_out.sql的内容但是似乎没有任何INSERT命令。如果我取出--inserts,则会出现COPY命令。

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = public, pg_catalog;

--
-- Data for Name: parent_table_to_copy; Type: TABLE DATA; Schema: public; Owner: user
--


--
-- PostgreSQL database dump complete
--

最后,psql -U user -h hostname2 -d dbname -f dump_out.sql只返回七个SET命令,当我从{strong> hostname2 我SELECT时,会有0条记录。

非常感谢任何见解,谢谢你的阅读。 -Kevin

  

编辑下面〜创建包含的表语句

CREATE TABLE IF NOT EXISTS parent_table_to_copy
(
id INTEGER NOT NULL,
name CHARACTER VARYING(25) NOT NULL,
vartype CHARACTER VARYING(26) NOT NULL,
var2type NUMERIC NOT NULL
);

CREATE TABLE child_table_a
( CONSTRAINT child_table_a_id_fk FOREIGN KEY (id) REFERENCES some_table (id) MATCH FULL ON DELETE CASCADE,
CONSTRAINT child_table_a_gene_name_fk FOREIGN KEY (name) REFERENCES some_other_table (name) MATCH FULL ON DELETE CASCADE,
CHECK (name like 'A%')
) INHERITS (parent_table_to_copy);
CREATE INDEX child_type_a ON child_table_a (id,name,vartype);

0 个答案:

没有答案