【问题标题】:how to insert data to a postgres table with enum data type in kettle pentaho?如何在kettle pentaho中将数据插入到具有枚举数据类型的postgres表中?
【发布时间】:2016-01-18 07:52:05
【问题描述】:

我正在尝试将数据从 mysql 移动到 postgres 表。所以我使用表输入步骤从 mysql 表中获取数据,并使用插入/更新步骤将数据插入到 postgres 表中。

postgres 表中有一个枚举数据类型。因此,当我尝试将数据插入该字段时,它会引发此错误:

2016/01/18 12:36:56 - Insert / Update.0 - ERROR: column "subject_classification" is of type subject_classification_type but expression is of type character varying
2016/01/18 12:36:56 - Insert / Update.0 -   Hint: You will need to rewrite or cast the expression.
2016/01/18 12:36:56 - Insert / Update.0 -   Position: 166

我知道这是一个转换问题,但我不知道如何将其转换为枚举数据类型。

这是表的表架构:

    CREATE TABLE subject (
    subject_id bigint NOT NULL,
    created_at timestamp without time zone DEFAULT timezone('UTC'::text, now()) NOT NULL,
    updated_at timestamp without time zone DEFAULT timezone('UTC'::text, now()) NOT NULL,
    code character varying(2000) NOT NULL,
    display_code character varying(2000) NOT NULL,
    subject_classification subject_classification_type NOT NULL,
    );


    CREATE TYPE subject_classification_type AS ENUM (
    'Math',
    'Social Science',
    'Language Arts'
);

请有人帮我解决这个问题。谢谢!

【问题讨论】:

    标签: mysql postgresql enums pentaho kettle


    【解决方案1】:

    例子

    create type suser as enum ('admin', 'user' , 'staff');
    drop table if exists user_login;
    create table user_login(
        id serial primary key, 
      who_logged suser, 
        when_logged timestamp default CURRENT_TIMESTAMP
    );
    

    示例解决方案

    请记住,此解决方案不使用 PreparedStatement 的强大功能,因此速度很慢。如果有百万条记录的插入,这可能不是一个好的解决方案,必须进行测量。

    但它实际上简化了生成插入、更新语句的版本,并使用相同的步骤“执行 SQL 语句”来执行它。

    【讨论】:

    • 或者你可以将数据下载到数据库并运行处理所有数据的函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2015-05-22
    • 2019-02-20
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多