首页 > 其他分享 >记一次cast使用问题

记一次cast使用问题

时间:2024-03-28 16:58:25浏览次数:22  
标签:一次 创建 numeric 查询 cast text 使用 regtype

适用范围

PostgreSQL

问题概述

昨天开发请求一个问题,在PostgreSQL数据库中创建了CAST(numeric as varchar),但是在进行模糊查询时,抛出如下错误:

ERROR:  operator does not exist: integer ~~ unknown
LINE 1: select * from t1 where id like '%1%';
                                  ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

问题分析

创建测试数据

create table t1 (id numeric);
insert into t1 values (123);

检查开发执行的 cast 创建语句并无问题。

create cast(numeric as varchar) with inout as implicit;

并且查询pg_cast 视图也查到了创建的 cast。

select oid, castsource::regtype, casttarget::regtype, castcontext, castmethod 
from pg_cast
where castsource::regtype='numeric'::regtype
and casttarget::regtype='varchar'::regtype;

怀疑语法有问题,遂通过显式转换检查是否能查出数据:

显然通过显式转换查询并无问题,通过 explain 查看其执行计划:

通过执行计划,可以看到 id 字段做了两次的类型转换,然后再进行模糊查询,那么有理由怀疑PG的优化器无法做到两次类型隐士转换,可以通过创建 numeric as text 的 cast 进行测试验证。


创建cast(numeric as text) 后,无查询语法错误。

解决方案

numeric 类型字段想要使用模糊查询,可以创建 cast(numeric as text)。

create cast(numeric as text) with inout as implicit;

tips:
数据库的类型转换也是需要消耗一定的算力资源,数据库数据量大并且单表很大的情况下,不太建议直接创建 cast 来实现模糊查询。

参考

https://www.postgresql.org/docs/12/sql-createcast.html
https://www.postgresql.org/docs/12/catalog-pg-cast.html
https://developer.aliyun.com/article/228271

标签:一次,创建,numeric,查询,cast,text,使用,regtype
From: https://www.cnblogs.com/user-shx/p/18102069

相关文章

  • golang调试利器 dlv 的使用
    安装Github地址: https://github.com/go-delve/delve/如果是在本地调试,直接通过goinstall命令将其安装到本地的$GOPATH/bin下即可goinstallgithub.com/go-delve/delve/cmd/dlv@latest容器环境下由于不一定支持go,需要先安装go语言环境,会比较麻烦,可以直接将本地下载好......
  • 固态硬盘都有其使用寿命,但有听说谁用完的吗?
    前言最近固态硬盘的价格好像又开始涨回去了,有没有小伙伴在价格稍微低的情况下多买几张的吗?固态硬盘的使用真的是越来越普遍了,大到服务器,小到手机、移动硬盘。咱们在购买固态硬盘的时候,都会看到上边标注着【特性】、【耐用等级】等。这个东西咱们叫做硬盘寿命,200TBW的意......
  • python-json数据、pyecharts的入门使用(折线图)
    目录1. json数据格式 1.1 json.dumps()1.2 json.loads()2. pyecharts的入门使用(折线图)2.1  pyecharts使用的简单示例2.1.1 导包2.1.2 创建对象2.1.3 添加x轴数据2.1.4 添加y轴数据2.1.5 设置全局配置项2.1.6 render()方法,生成图像3. ......
  • 使用机器学习进行多组学分析的 3+2 个挑战(2024年3月30日组会报告)
    利用机器学习进行多组学数据分析使用机器学习进行多组学分析的3+2个挑战3.1异质性、稀疏性和异常值来自不同高通量来源的多组学数据通常是异构的(Bersanellietal.,2016)。例如,转录组学和蛋白质组学在组学分析之前使用不同的标准化和缩放技术。这导致不同的动态范围和数据分......
  • 在Vue项目中使用Vuex进行状态管理是一种常见做法。下面是一个简单的示例,展示了如何创
    步骤1:创建VuexStore首先,你需要创建一个Vuexstore。通常,这是在你的项目的store目录下完成的。//store.jsimportVuefrom'vue';importVuexfrom'vuex';Vue.use(Vuex);conststore=newVuex.Store({state:{count:0},mutations:{increment(......
  • oop对象使用过程中,调用了什么方法
    探索探索oop代码中,类对象定义、声明、初始化、赋值、引用等过程中,调用了什么函数。假设Test类有带参构造函数,拷贝构造函数,重载赋值运算符,析构函数等。1、Test类只有一个成员变量/*C++编译器对于对象构造的优化:用临时对象生成新对象的时候,临时对象就不产......
  • Cairo使用指南
    Cairo是一个用于创建矢量图形的开源库,它支持多种操作系统和平台,并提供了丰富的图形绘制功能。以下是Cairo的简单使用指南:环境准备:确保你的开发环境已经安装了Cairo库。根据你的开发语言和平台,可能需要安装相应的Cairo绑定或接口。创建Cairo环境:在使用Cairo进行......
  • 在Linux中,如何使用iostat、sar、netstat等工具进行硬件资源监控?
    在Linux系统中,有多种工具可用于监控硬件资源,其中iostat、sar和netstat是常用的几个。下面我会详细解释如何使用这些工具进行硬件资源监控。1.iostat:监控磁盘I/O统计信息iostat是一个用于监视系统输入/输出设备加载情况的工具。它可以报告中央处理器(CPU)统计信息和所有已安装文件......
  • 在Linux中,如何使用top、htop、vmstat等命令监控系统性能?
    在Linux系统中,top、htop和vmstat是三个常用的命令行工具,用于监控系统性能。它们分别提供了不同的视角和信息,帮助管理员了解系统的运行状况。1.top命令top是一个实时显示系统进程状态的动态视图工具,可以显示系统总体负载、各个进程的资源消耗(CPU、内存)等情况。基本用法:......
  • NVM的使用
    说明:本章内容为博主在原教程基础上添加自己的学习笔记,来源<[window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)(https://blog.csdn.net/HuangsTing/article/details/113857145)>,教程版权归原作者所有。#卸载node如果你已经安装了node,那么你需要先卸载node,如果你没有安装......