Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL在创建数据库时自动创建函数_Sql_Postgresql - Fatal编程技术网

PostgreSQL在创建数据库时自动创建函数

PostgreSQL在创建数据库时自动创建函数,sql,postgresql,Sql,Postgresql,我需要在PostgreSQL server中为每个登录的用户创建一个新数据库。因此,每个用户有一个数据库。 此外,该数据库将很少调用自定义定义的函数。 我希望在创建数据库后立即自动执行创建自定义函数的过程。这样我就不必显式地在每个数据库中执行函数 这可能吗?来自: 创建数据库实际上是通过复制现有数据库来工作的。通过 默认情况下,它复制名为template1的标准系统数据库。因此 该数据库是创建新数据库的“模板”。如果 如果将对象添加到template1,这些对象将被复制到 随后创建了用户数据库。

我需要在PostgreSQL server中为每个登录的用户创建一个新数据库。因此,每个用户有一个数据库。 此外,该数据库将很少调用自定义定义的函数。 我希望在创建数据库后立即自动执行创建自定义函数的过程。这样我就不必显式地在每个数据库中执行函数

这可能吗?

来自:

创建数据库实际上是通过复制现有数据库来工作的。通过 默认情况下,它复制名为template1的标准系统数据库。因此 该数据库是创建新数据库的“模板”。如果 如果将对象添加到template1,这些对象将被复制到 随后创建了用户数据库。此行为允许站点处于本地状态 对数据库中标准对象集的修改。对于 例如,如果在template1中安装过程语言PL/Perl, 它将自动在用户数据库中可用,无需任何额外的操作 创建这些数据库时正在采取的操作

因此,您可以在Template1DB中创建“默认”对象并“克隆”它。或者,您可以在示例数据库中创建所有需要的关系(表、函数等),然后使用“克隆”它

同样,您可以使用不同的“默认”预创建对象创建多个模板数据库,并根据需要“克隆”它们

阅读上面关于限制等的文档

更新
将向您展示如何使用pgadmin执行此操作

是否可行?是,在template1数据库中创建函数。这有意义吗?很可能不是。正如@a_horse_with_no_name所说,您可以在样本数据库中创建所有需要的关系,然后使用
使用模板sample_db创建数据库new_db“克隆”它虽然模板数据库是一个很好的解决方案,但我更喜欢使用类似或Flyway的方式来管理整个数据库设置脚本(包括表和函数)。该脚本应该存储在git或Subversion等版本控制系统中,以管理这些脚本(防止类似的情况发生),而不需要特殊的示例数据库。在
template1
中创建这些函数是很好的,但是我想,下一个OP的问题是如何将template1数据库重新生成为“默认”,所以我想接下来的步骤将展示如何使用template创建数据库。如何使用pgAdmin客户端在template1数据库中创建函数?我看不到任何加载template1数据库的方法,但是,我确实看到了postgres数据库。是否有一条语句,我可以加载Template1DB的上下文,然后在Template1DB下创建我创建的任何函数。就像在SQL中一样,我们有“使用”命令
create database new_db with template sample_db;