当前位置: 首页 > 知识库问答 >
问题:

postgresql中不存在函数min(uuid)

严阳秋
2023-03-14

我使用sqoop将表从Postgres导入到hdfs。我的表有uuid字段作为主键,我的命令sqoop如下:

sqoop import --connect 'jdbc:postgresql://localhost:5432/mydb' --username postgreuser --password 123456abcA --driver org.postgresql.Driver --table users --map-column-java id=String --target-dir /hdfs/postgre/users --as-avrodatafile --compress -m 2

但我得到了错误:

Import failed: java.io.IOException: org.postgresql.util.PSQLException: ERROR: function min(uuid) does not exist

我尝试执行sql命令:从用户中选择最小(id)并得到相同的错误。我该如何解决它?我使用后记 9.4、哈多普 2.9.0 和 sqoop 1.4.7

共有3个答案

诸葛雨泽
2023-03-14

我发现@robin萨利赫和@bodgan市场提供的答案是一个很好的起点,但最终是不正确的。这是一个更适合我的解决方案:

    CREATE FUNCTION min_uuid(uuid, uuid)
    RETURNS uuid AS $$
    BEGIN
        -- if they're both null, return null
        IF $2 IS NULL AND $1 IS NULL THEN
            RETURN NULL ;
        END IF;

        -- if just 1 is null, return the other
        IF $2 IS NULL THEN
            RETURN $1;
        END IF ;
        IF $1 IS NULL THEN
            RETURN $2;
          END IF;

        -- neither are null, return the smaller one
        IF $1 > $2 THEN
            RETURN $2;
        END IF;

        RETURN $1;
    END;
    $$ LANGUAGE plpgsql;


    create aggregate min(uuid) (
      sfunc = min_uuid,
      stype = uuid,
      combinefunc = min_uuid,
      parallel = safe,
      sortop = operator (<)
    );

要了解更多细节,请看我的文章如何选择左外连接的最小UUID?

东方夕
2023-03-14

Postgres没有min/max uuid的内置函数,但是您可以使用以下代码创建自己的函数:

CREATE OR REPLACE FUNCTION min(uuid, uuid)
RETURNS uuid AS $$
BEGIN
    IF $2 IS NULL OR $1 > $2 THEN
        RETURN $2;
    END IF;

    RETURN $1;
END;
$$ LANGUAGE plpgsql;


CREATE AGGREGATE min(uuid)
(
    sfunc = min,
    stype = uuid
);
燕智
2023-03-14

我想相信@robin-salh的回答,我已经使用它和min for int的实现来构建以下代码:

CREATE OR REPLACE FUNCTION min(uuid, uuid)
RETURNS uuid AS $$
BEGIN
    IF $2 IS NULL OR $1 > $2 THEN
        RETURN $2;
    END IF;

    RETURN $1;
END;
$$ LANGUAGE plpgsql;


create aggregate min(uuid) (
  sfunc = min,
  stype = uuid,
  combinefunc = min,
  parallel = safe,
  sortop = operator (<)
);

它几乎相同,但利用了B树索引,因此从tbl选择min(id)只需几毫秒。

P.S.我不是pgsql专家,也许我的代码有点错误,在生产中使用之前要仔细检查,但我希望它能正确使用索引和并行执行。我只是根据示例代码编写的,而不是深入研究PG中聚合背后的理论。

 类似资料:
  • 需要您的帮助,我不明白为什么会出现以下错误,我不是专业的postgresql开发人员。。 正如你可以看到创建的函数,那么为什么函数不存在? 错误:函数logintry(未知,未知,带时区的时间戳,整数)不存在第1行:选择logintry('Jon.Jones88@gmail.com','_@kjhfdb987',...^HINT:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。SQL

  • MariaDB 函数用于检索表达式的最小值。 语法: 数据准备 在数据库中创建一个表,并插入一些数据。参考以下创建语句 - 1. MIN()函数与单表达式 示例: 查询表的最低分数。参考以下查询语句 - 执行上面查询语句,得到以下结果 - 2. Min()函数与GROUP BY子句 可以使用函数的子句来分组。 再插入一条重复的数据 - 当前数据库中的记录如下 - 示例: 执行上面查询语句,得到以下

  • MIN() 函数 MIN() 函数返回指定列的最小值。 SQL MIN() 语法SELECT MIN(column_name) FROM table_name; 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。 下面是选自 "Websites" 表的数据: +----+--------------+---------------------------+-------+------

  • Python3 数字 描述 min() 方法返回给定参数的最小值,参数可以为序列。 语法 以下是 min() 方法的语法: min( x, y, z, .... ) 参数 x -- 数值表达式。 y -- 数值表达式。 z -- 数值表达式。 返回值返回给定参数的最小值。 实例 以下展示了使用 min() 方法的实例: #!/usr/bin/python3 print ("min(80,

  • 我能够通过一个PHP脚本用这些完全相同的凭证连接到< code>protomolecule数据库。如图所示,试图在PhpStorm中设置它失败了。 如果我将数据库更改为默认的数据库,它在PhpStom中连接得很好。我不明白为什么用户只能连接到而不是其他任何东西。 我尝试设置新用户和新数据库无济于事。 编辑:根据要求添加了下面的工作PHP脚本设置。

  • 问题内容: 这个psql会话代码段应该是不言自明的: 问题是Postgres函数不喜欢字段类型,但是根据文档,此调用应该是完全正确的吗? 问题答案: 使用显式类型转换: 或更改列输入。 为什么? Postgres允许函数重载。函数签名是由它们的(可选的,由 模式 限定的) 名称 加上 输入参数类型 (的列表)定义的。期望类型的2参数形式 作为第一个参数: 如果没有现有函数 完全 匹配,则“函数类型