Postgresql 带点数的Postgres
我正在尝试编写一个PL/PGSQL函数,该函数将分隔文本作为输入,并将行插入到包含点的表中。我有一个可以正常工作的测试函数:Postgresql 带点数的Postgres,postgresql,postgis,plpgsql,unnest,Postgresql,Postgis,Plpgsql,Unnest,我正在尝试编写一个PL/PGSQL函数,该函数将分隔文本作为输入,并将行插入到包含点的表中。我有一个可以正常工作的测试函数: rowsaz := string_to_array(input,'?'); INSERT INTO test (num1, num2, my_name) SELECT * FROM unnest(string_to_array(rowsaz[1],',')::integer[],string_to_array(rowsaz[2],',')::integer[],strin
rowsaz := string_to_array(input,'?');
INSERT INTO test (num1, num2, my_name)
SELECT * FROM unnest(string_to_array(rowsaz[1],',')::integer[],string_to_array(rowsaz[2],',')::integer[],string_to_array(rowsaz[3],',')::varchar[]);
return true;
所以如果你用
SELECT myfunction('1,2,3?4,5,6?a,b,c')
然后你会得到一张像这样的桌子
1 4 a
2 5 b
3 6 c
CREATE TABLE public.gps_points
(
id integer NOT NULL DEFAULT nextval('gps_id_seq'::regclass),
location geometry(Point,4326),
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
user_id integer
)
但是当你有一张像这样的桌子时,你怎么做呢
1 4 a
2 5 b
3 6 c
CREATE TABLE public.gps_points
(
id integer NOT NULL DEFAULT nextval('gps_id_seq'::regclass),
location geometry(Point,4326),
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
user_id integer
)
插入的内容看起来像
插入gps_点(位置、用户id)值(ST_GeomFromText('POINT(-71.060316 48.432044)),4326),2
但是对于unnest,这会变得很棘手,因为必须将坐标传递到ST_POINT函数中。然后我将使用以下命令调用该函数:
选择myfunction('36.98,36.99,36.97?45.85,45.86,45.87?1,2,3')
我正试着做下面的事情,但行不通
insert into gps_points( geom, user_id)
select unnest( (ST_GeomFromText('POINT(string_to_array(rowsaz[1],',')::double precision[] string_to_array(rowsaz[2],',')::double precision[])', 4326),string_to_array(rowsaz[3],',')::double precision[]));
有人帮我弄到了:
insert into gps_points( geom, user_id)
select ST_SetSRID(ST_MakePoint(lng, lat), 4326), uid from unnest(string_to_array(rowsaz[1],',')::double precision[],string_to_array(rowsaz[2],',')::double precision[],string_to_array(rowsaz[3],',')::integer[]) as u(lng,lat,uid);