首页 > 数据库 >论lightdb/postgresql中的search_path及实现兼容性管理

论lightdb/postgresql中的search_path及实现兼容性管理

时间:2022-09-04 21:25:41浏览次数:99  
标签:search postgresql lightdb 自定义 mysql oracle path

  上一篇介绍了lightdb/postgresql public、pg_catalog schema的区别及pg_namespace概念,因为最近几个版本开发下来,遇到了很多兼容性挑战。所以这一节来专门讨论一下search_path,以及它是如何实现版本隔离和理论上可实现的租户隔离(实际上,lightdb在22.1-22.2实现了,但是不够放心22.3临时取消了,22.4大概率会加回来,因为这涉及到database级别immutable,所以比较复杂)。

  search_path的用途是在语义分析的时候,确定函数、操作符、表等对象时让哪个命名空间中的生效。在Lightdb中,默认情况下,其取值为 "$user", public, lt_catalog。oracle模式,一般建议用户设置为"$user", public, lt_catalog, oracle。mysql模式则设置为"$user", public, lt_catalog, mysql。如果用户要添加一些额外的mysql/oracle兼容函数,可以考虑创建一个新的namepace,如$user_mysql_ext,然后在其中创建兼容函数,并添加到search_path的最后。这样当lightdb新版实现了兼容函数时,因为它会被添加到lt_catalog/mysql/oracle至少之一下,内置版本既能覆盖自定义版本,也不会带来额外的兼容性问题。可以从机制上很好的解决该兼容问题。

  虽然search_path能够解决该问题,但是由于它太灵活,一定要避免随意设置,比如避免设置同时包含oracle和mysql,当然lightdb在内部就进行了规避,如果是开源postgresql,这是需要注意的。

  对于oracle兼容,上述机制对自定义函数、存储过程、视图等都可以比较好的解决。但是对于oracle包(package),无论是内置包还是用户自定义包,事情要复杂一点。在lightdb中,oracle内置包按照schema存储,走search_path机制,自定义包是在lt_package中。包括集合类型、自定义类型、sys_refcursor、函数、过程等。

标签:search,postgresql,lightdb,自定义,mysql,oracle,path
From: https://www.cnblogs.com/zhjh256/p/16634472.html

相关文章

  • lightdb使用一条sql实现高性能事务一致性归历史
    相比insertselect,delete,如下:--lightdb专有oracle匿名块写法BEGINTRANSACTIONISOLATIONLEVELREPEATABLEREAD;insertintoxxselectxxfromyywhereid<xxx;......
  • PostgreSQL-查询
    检索过程或从数据库中检索数据的命令称为查询。在SQL中,SELECT命令用于指定查询。SELECT命令的一般语法是:[WITHwith_queries]SELECTselect_listFROMtable_express......
  • PostgreSQL-从修改的行返回数据
    有时在操作修改的行时从修改的行中获取数据很有用。INSERT、UPDATE和DELETE命令都有一个可选的RETURNING子句来支持这一点。使用RETURNING可以避免执行额外的数据库......
  • PostgreSQL-插入
    创建表时,它不包含任何数据。在数据库发挥作用之前要做的第一件事就是插入数据。数据一次插入一行。您还可以在单​​个命令中插入多行,但不能插入不完整的行。即使您只知道......
  • ElasticSearch-全文检索
    1.ElasticSearch-全文检索1.1简介:Elasticsearch是一个分布式的开源搜索和分析引擎,在ApacheLucene的基础上开发而成。Lucene是开源的搜索引擎工具包,Elasticsearch......
  • PostgreSQL-表继承
    让我们从一个例子开始:假设我们正在尝试为城市构建一个数据模型。每个州都有许多城市,但只有一个首府。我们希望能够快速检索任何特定州的首都。这可以通过创建两张表来完成,......
  • PostgreSQL-schema
    数据库包含一个或多个命名模式,这些模式又包含表。模式还包含其他类型的命名对象,包括数据类型、函数和运算符。相同的对象名称可以在不同的模式中使用而不会发生冲突;例如,sch......
  • Elasticsearch 面试题
    Elasticsearch面试题为什么要使用Elasticsearch?系统中的数据,随着业务的发展,时间的推移,将会非常多,而业务中往往采用模糊查询进行数据的搜索,而模糊查询会导致查询引擎......
  • Elasticsearch
    Elasticsearch什么是ElasticsearchElasticsearch、Kibana、Beats和LogstashES是一个开源的高扩展的分布式全文搜索引擎全文搜索引擎这里说到的全文搜索引擎指的是......
  • PostgreSQL-更改表
    当您创建一个表并意识到您犯了一个错误,或者应用程序的需求发生变化时,您可以删除该表并重新创建它。但是,如果表已经被数据填充,或者表被其他数据库对象引用(例如外键约束),这不......