PostgreSQL:每年创建新/重复现有表的最佳方式

Str*_*rae 2 php database postgresql

提到这个问题,我决定每年复制表格,用年份数据创建表格,例如:

orders_2008
orders_2009
orders_2010
etc...
Run Code Online (Sandbox Code Playgroud)

好吧,我知道速度问题可能只用每个元素的2个表来解决,比如orders_history和order_actual,但我认为一旦编写了处理程序代码,就没有区别......只有很多表.

那些桌子甚至会有一些带外键的孩子; 例如,orders_2008将具有子items_2008:

CREATE TABLE orders_2008 (
    id serial NOT NULL,
    code character(5),
    customer text
);

ALTER TABLE ONLY orders_2008
    ADD CONSTRAINT orders_2008_pkey PRIMARY KEY (id);

CREATE TABLE items_2008 (
    id serial NOT NULL,
    order_id integer,
    item_name text,
    price money
);

ALTER TABLE ONLY items_2008
    ADD CONSTRAINT items_2008_pkey PRIMARY KEY (id);

ALTER TABLE ONLY items_2008
    ADD CONSTRAINT "$1" FOREIGN KEY (order_id) REFERENCES orders_2008(id) ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:您认为每个1月1日复制这些表的最佳方式是什么,当然,保持表依赖性?

一个PHP/Python脚本,在查询后查询,重建新年的结构(由cron作业调用)?PostgreSQL的功能可以这样使用吗?如果是的话,如何(一个小例子会很好)

其实我是第一种方式(包含结构的.sql文件,以及由cronjob加载的php/python脚本重建结构),但我想知道这是否是最好的方法.

编辑:我已经看到了pgsql函数CREATE TABLE LIKE,但是必须在第二次添加foreigns键...或者它将保持新表的旧参考.

Joh*_*ney 5

PostgreSQL有一个功能,允许您创建一个继承另一个表中的字段的表.文档可以在他们的手册中找到.这可能会简化您的过程.