Postgres vs MySQL函数返回行集

nuypyhwy  于 2024-01-05  发布在  Mysql
关注(0)|答案(1)|浏览(145)

我们正在将一个项目从MySQL迁移到Posterre。
在MySQL中,我们有以下存储过程代码:

  1. CREATE OR REPLACE PROCEDURE getData()
  2. BEGIN
  3. SELECT t1.*,
  4. t2.*,
  5. t3.*,
  6. t4.*
  7. FROM t1
  8. JOIN t2 ON t1.t1_id = t2.t2_t1_id
  9. JOIN t3 ON t1.t1_id = t3.t3_t1_id
  10. JOIN t4 ON t1.t1_id = t4.t4_t1_id;
  11. END //

字符串
当从使用CALL getData)_的NodeJS应用程序调用时,它返回数组或行和列形式的数据,例如row[0]['t2_t1_id']以访问行1列t2_t1_id。
我们得到的以可用格式(JSON)返回数据的Posterre版本如下所示:

  1. RETURNS TABLE( j JSON )
  2. LANGUAGE plpgsql AS $$
  3. BEGIN
  4. RETURN QUERY
  5. WITH rd AS (
  6. SELECT t1.*,
  7. t2.*,
  8. t3.*,
  9. t4.*
  10. FROM t1
  11. JOIN t2 ON t1.t1_id = t2.t2_t1_id
  12. JOIN t3 ON t1.t1_id = t3.t3_t1_id
  13. JOIN t4 ON t1.t1_id = t4.t4_t1_id
  14. )
  15. SELECT row_to_json(rd) FROM rd;
  16. END;


但这会以JSON的形式返回:

  1. [
  2. {
  3. getdata: {
  4. t1_id: 62,
  5. t1_name: 'xx',
  6. t2_id: 67,
  7. t2_t1_id: 62, ... },
  8. getdata: {
  9. t1_id: 63,
  10. t1_name: 'yy',
  11. t2_id: 69,
  12. t2_t1_id: 63, ... }, ...


我想让PostGres函数返回数据对象,就像它返回MySQL等价对象一样?

zu0ti5jz

zu0ti5jz1#

尝试以下操作我修改了PostgreSQL函数,使其返回一组记录而不是JSON,使其输出格式与MySQL存储过程更接近。

  1. CREATE OR REPLACE FUNCTION getData()
  2. RETURNS SETOF RECORD
  3. LANGUAGE plpgsql AS $$
  4. BEGIN
  5. RETURN QUERY
  6. SELECT t1.*,
  7. t2.*,
  8. t3.*,
  9. t4.*
  10. FROM t1
  11. JOIN t2 ON t1.t1_id = t2.t2_t1_id
  12. JOIN t3 ON t1.t1_id = t3.t3_t1_id
  13. JOIN t4 ON t1.t1_id = t4.t4_t1_id;
  14. END;
  15. $$;

字符串
你可以这样调用函数

  1. SELECT * FROM getData() AS (column1 type1, column2 type2, ...);

展开查看全部

相关问题