Postgres查询 - 添加新行或只是附加到数组的有效方法

时间:2014-12-19 11:10:09

标签: arrays postgresql

我在postgres db中有以下表格:

    CREATE TABLE customers (
        id SERIAL PRIMARY KEY,
        system_id VARCHAR(64) UNIQUE,
        license_serials INTEGER[],
        name VARCHAR(256));

我有license_serial,我知道表中没有客户在license_serials数组中有该序列。在这种情况下,我通过其他方式获取system_id,然后需要:

  • 使用以下内容向customers表添加新行 license_serial,name,system_id我已经获得如果没有客户 已经
  • 表中的相同system_id

  • 在表格中找到具有该system_id的客户,然后附加 新license_serial到他们的license_serials数组

我能够通过一系列查询和IF语句来完成此操作,但我想知道是否有一种有效的方法可以使用子查询或其他方式执行此操作?我一般都对SQL不熟悉,并且无法正确理解语法。

这是我到目前为止所做的...虽然它并没有真正起作用,但是如果客户(使用那个system_id)已经存在,我还没有想出如何附加到数组表

    CREATE OR REPLACE FUNCTION get_or_insert_customer
            ( p_system_id customers.system_id%TYPE
            , p_name customers.name%TYPE
            , p_serial INTEGER
            )  RETURNS customers.id%TYPE AS $func$

        LOCK TABLE {1} IN EXCLUSIVE MODE;
        INSERT INTO {1}(system_id, name, license_serials)
            SELECT p_system_id,p_name,ARRAY[p_serial]
                WHERE NOT EXISTS (SELECT 1 FROM customers WHERE system_id = p_system_id)
            ;

        SELECT id
            FROM customers WHERE system_id = p_system_id
            ;

非常感谢您的阅读!

0 个答案:

没有答案