代码之家  ›  专栏  ›  技术社区  ›  twisted

如何从postgresql中的变量创建数组?

  •  0
  • twisted  · 技术社区  · 2 年前

    我想从两个变量p,q创建一个数组。 以下是我的尝试:

    DO
      $code$
        DECLARE
          p text := 'Hello';
          q text := 'world!';
          ta text[];             --text array
        BEGIN
          ta := {p, q};
          RAISE INFO '% %', ta[1], ta[2];
        END
      $code$;
    
    

    但它不起作用

    postgres=# DO
    postgres-#   $code$
    postgres$#     DECLARE
    postgres$#       p text := 'Hello';
    postgres$#       q text := 'world!';
    postgres$#       ta text[];             --text array
    postgres$#     BEGIN
    postgres$#       ta := {p, q};
    postgres$#       RAISE INFO '% %', ta[1], ta[2];
    postgres$#     END
    postgres$#   $code$;
    ERROR:  syntax error at or near "{"
    LINE 8:       ta := {p, q};
                        ^
    

    DO
      $code$
        DECLARE
          p text := 'Hello';
          q text := 'world!';
          ta text[];             --text array
        BEGIN
          RAISE INFO 'p=[%] q=[%]', p, q;
          ta := array_append(array_append(ta, p), q);
          RAISE INFO '% %', ta[1], ta[2];
        END
      $code$;
    

    我应该如何在pl/pgsql中做到这一点?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Atmo    2 年前

    阵列记录在 this page .

    对于常量数组,您的语法几乎可以工作,除非它必须写成字符串: '{p, q}' 然而,在您的情况下, p 和 q 是可变的,并且此表达式被计算为字符串 'p' 和字符串 'q' 在一个数组中。

    包括变量,只要

    和 q 具有相同的类型,这就是您的问题中的情况: ARRAY[p, q]
    IMHO,总的来说,它比其他语法更方便。

    您的全部更正代码:

    DO
      $code$
        DECLARE
          p text := 'Hello';
          q text := 'world!';
          ta text[];             --text array
        BEGIN
          ta := ARRAY[p, q];
          RAISE INFO '% %', ta[1], ta[2];
        END
      $code$;