在postgresql上使用扩展orafce安装的模式

时间:2017-07-05 07:37:49

标签: oracle postgresql orafce

我在postgresql 9.5上安装了orafce扩展。我看到最好为所有扩展创建一个特定的模式,这就是我所做的。我连接到模板1并执行了下一个命令:

template1=# create schema extensions;
CREATE SCHEMA
template1=# grant usage on schema extensions to public;
GRANT
template1=# grant execute on all functions in schema extensions to public;
GRANT
template1=# alter default privileges in schema extensions grant execute on             
functions to public;
ALTER DEFAULT PRIVILEGES
template1=# alter default privileges in schema extensions grant usage on     
types to public;
ALTER DEFAULT PRIVILEGES
template1=# create extension orafce schema extensions;
CREATE EXTENSION
template1=# show search_path;
search_path
 -----------------
"$user", public
(1 row)

template1=# set search_path="$user",public,extensions;
SET

之后我创建了一个新的数据库test1和一个新的用户mariel1。另外我编辑了postgresql.conf并将search_path设置为“$ user”,public,extensions。

我连接到数据库 - psql -d test1 -U mariel1。现在,当我尝试使用函数sysdate时,例如数据库无法识别函数

postgres=# select sysdate() from dual;
ERROR:  function sysdate() does not exist
LINE 1: select sysdate() from dual;
           ^
HINT:  No function matches the given name and argument types. You might need     
to add explicit type casts.
postgres=# select extensions.sysdate() from dual;
ERROR:  schema "extensions" does not exist
LINE 1: select extensions.sysdate() from dual;

经过一些搜索后,我看到了其他模式下可用的一些函数,如oracle,utl_file等。 我想了解为什么orafce(oracle.sysdate等...)的函数在不同的模式(oracle,utl_file ..)下创建,而不是在我的新模式扩展下。

1 个答案:

答案 0 :(得分:0)

PostgreSQL中的扩展是数据库级别而不是架构级别或实例级别。您无法在同一数据库中创建相同的扩展。但您可以在多个数据库中创建相同的扩展名。那就是PostgreSQL的扩展工作方式。