首页 文章

主键列需要在postgresql中自动递增

提问于
浏览
0

我在postgresql中创建了一个下表:

create table retail_fact( id serial not null, name text);

我在hive和MySQL中有客户表,我想使用Pentaho pdi(通过presto连接)将数据从它们加载到PostgreSQL retail_fact 表 .

另外,当我使用来自Hive和MySQL的数据加载表时,O希望id在Postgres中自动递增(更简单的说法 . 我需要一个sql查询来做同样的事情) .

查询如下所示:

insert into postgresql.rpt.order_fact(

select name from hive.retail.customer_hive
UNION
select name from mysql.retail.customer_mysql

);

当我将名称列的上述数据插入postgres中的order_fact时,如何使id列自动递增?

1 回答

  • 0

    你的表构造看起来不像PostgreSQL ......可能是MS SQL Server或Sybase,但是除此之外 . 如果您使用的是PostgreSQL且版本为9.x,则序列会在幕后实现序列/默认值 . 我认为在10.x上它是不同的,但在9.x上,你可以简单地劫持你的插入序列:

    insert into postgresql.rpt.order_fact
    with results as (
      select name from hive.retail.customer_hive
      UNION
      select name from mysql.retail.customer_mysql
    )
    select
      nextval('retail_fact_id_seq'), name
    from results;
    

    我假设CTE是必要的,否则唯一的序列值会将 union 变成 union all .

    或者,更好(更便携),在插入中明确指定字段:

    insert into postgresql.rpt.order_fact (name)
    select name from hive.retail.customer_hive
    UNION
    select name from mysql.retail.customer_mysql
    

相关问题