首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >区分模式和数据库

区分模式和数据库
EN

Database Administration用户
提问于 2012-11-20 09:44:19
回答 1查看 2.3K关注 0票数 4

这个PL/pgSQL代码出现了错误cross-database references are not implemented: scan.location.alias

代码语言:javascript
复制
DECLARE
    v_tmp_host scan.location.alias%TYPE;
    v_ip_address character varying;
BEGIN
    -- Some assignment to v_ip_address

    v_tmp_host := v_ip_address::scan.location.alias%TYPE;

由于代码工作了很长时间,我调查并发现,“扫描”是数据库中存在此触发器的模式,几天前有人创建了一个名为“扫描”的数据库。因为现在“扫描”既是一个数据库,也是一个模式,pg似乎使用db而不是模式。

我的问题是,将来怎样才能避免这些问题呢?我应该如何编写这段代码以避免通过创建额外的关系、数据库或模式而中断?

或者换句话说:在这种情况下,我如何强制pg使用模式而不是数据库?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2012-11-20 10:15:53

您必须将变量声明为所需的类型。%TYPE构造用于复制类型,因此它仅在DECLARE部分中可用。作为回报,任务将更简单:

代码语言:javascript
复制
DECLARE
    v_tmp_host scan.location.alias%TYPE;
    v_ip_address character varying;
BEGIN
    v_ip_address := '127.0.0.1';
    v_tmp_host := v_ip_address;
    [...]

对代码的唯一更改是,我完全忽略了赋值中的强制转换。在这种情况下,PostgreSQL不会尝试将scan解析为数据库名称,因为跨数据库引用没有实现.

如果您用某种类型声明了变量,则赋值将尝试将给定的值转换为该类型。万一失败,你就会有一个错误。因为普通的inet输入只是一个单引号字符串,所以varchar将被接受(如果它的格式符合inet输入格式)。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/28973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档