PostgreSQL - 从模板数据库创建数据库

时间:2017-09-25 09:10:21

标签: postgresql

如果我创建了一个数据库<li><a href="/orderHistory">History</a></li>

  1. 有初始数据
  2. 加载自定义存储过程
  3. 加载并使用外部库
  4. 如果我像这样创建数据库foo

    foobar

    数据库CREATE DATABASE foobar WITH ENCODING 'UTF8' TEMPLATE foo; 是否有:

    1. 使用
    2. 初始化foo的相同数据
    3. foobar
    4. 加载的相同自定义存储过程
    5. 使用foo
    6. 中加载的共享库的功能

      [[附录]

      我编写了几个C库扩展,它们作为共享库加载到我用作模板的数据库中。我主要担心的是这些库是否也会被后续数据库基于模板加载。

2 个答案:

答案 0 :(得分:1)

为什么不试试自己?..

t=# create database foo;
CREATE DATABASE
Time: 426.799 ms
t=# \c foo
You are now connected to database "foo" as user "postgres".

数据:

foo=# create table b(i int);
CREATE TABLE
Time: 3.794 ms
foo=# insert into b select 43;
INSERT 0 1
Time: 13.608 ms

FN():

foo=# create function a() returns int as $$select 42;$$ language sql;
CREATE FUNCTION
Time: 1.548 ms

延伸:

foo=# create extension pg_stat_statements;
CREATE EXTENSION
Time: 4.275 ms

使用模板:

foo=# create database boo template foo;
CREATE DATABASE
Time: 640.328 ms
foo=# \c boo
You are now connected to database "boo" as user "postgres".

数据在那里:

boo=# select count(1) from b;
 count
-------
     1
(1 row)

Time: 1.569 ms

扩展名可用:

boo=# select count(1) from pg_stat_statements;
 count
-------
  4927
(1 row)

Time: 1023.658 ms

fn()返回相同的结果:

boo=# select a();
 a
----
 42
(1 row)

Time: 0.399 ms

答案 1 :(得分:0)

您需要将数据库foo设置为模板数据库。

  

ALTER DATABASE foo IS_TEMPLATE true;

然后您可以使用它来创建新数据库

  

CREATE DATABASE foobar TEMPLATE foo;