微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Postgres 中使用 plperl 解决“错误:被操作掩码捕获”

如何解决如何在 Postgres 中使用 plperl 解决“错误:被操作掩码捕获”

我在 Postgresql 数据库中有一个表,它使用 bytea 字段来存储浮点和双精度数组。我有一个使用 plpython3u 扩展名将列转换为双精度数组的函数

CREATE FUNCTION data.bytea_to_double_array(byte_array BYTEA,num_bytes INTEGER)
  RETURNS DOUBLE PRECISION[]
AS $$

  if num_bytes == 8:
    data_format = 'd'
  elif num_bytes == 4:
    data_format = 'f'
  else:
    return None

  data = struct.unpack('<' + str(len(byte_array) // num_bytes ) + data_format,byte_array)
  
  return data
$$ LANGUAGE plpython3u;

我正在寻找使用 plperl 扩展的替代功能。我尝试了以下方法

CREATE FUNCTION data.bytea_to_double_array(byte_array BYTEA,num_bytes INTEGER)
  RETURNS DOUBLE PRECISION[]
AS $$
   
  if($_[1] == 8){
    $data_format = 'd*';
  }elsif ($_[1] == 4){
    $data_format = 'f*';
  }else{
    RETURN None;
  }

  @data = unpack($data_format,$_[0]);
       
  RETURN @data;
$$ LANGUAGE plperl;

当我尝试构建函数时出现此错误

错误:'unpack' 被第 11 行的操作掩码捕获。

任何想法如何纠正这个?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。