尝试在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个子项。例如,如果我想要name
从parent_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);