結論。arr := ('[0:'||array_length(arr,1)-1||']='||(arr::text))::int[];
すべし。
DO$do$DECLAREarrint[]:='{1,2,3,4}'::int[];BEGINRAISENOTICE'before';RAISENOTICE'arr=%',arr;RAISENOTICE'arr[0]=%',arr[0];RAISENOTICE'arr[1]=%',arr[1];RAISENOTICE'arr[2]=%',arr[2];RAISENOTICE'arr[3]=%',arr[3];RAISENOTICE'arr[4]=%',arr[4];arr:=('[0:'||array_length(arr,1)-1||']='||(arr::text))::int[];RAISENOTICE'after';RAISENOTICE'arr=%',arr;RAISENOTICE'arr[0]=%',arr[0];RAISENOTICE'arr[1]=%',arr[1];RAISENOTICE'arr[2]=%',arr[2];RAISENOTICE'arr[3]=%',arr[3];RAISENOTICE'arr[4]=%',arr[4];END;$do$;
↑実行すると、
NOTICE: before
NOTICE: arr={1,2,3,4}
NOTICE: arr[0]=<NULL>
NOTICE: arr[1]=1
NOTICE: arr[2]=2
NOTICE: arr[3]=3
NOTICE: arr[4]=4
NOTICE: after
NOTICE: arr=[0:3]={1,2,3,4}
NOTICE: arr[0]=1
NOTICE: arr[1]=2
NOTICE: arr[2]=3
NOTICE: arr[3]=4
NOTICE: arr[4]=<NULL>
DO
となる。