postgresql 如何从Supabase表中获取Postgres类型列表?

hrysbysz  于 2023-01-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(119)

我尝试在Supabase的RPC函数中添加这个函数,但是我不确定为什么它只返回第一列。

SELECT
column_name,
data_type
FROM
information_schema.columns
WHERE
table_name = 'frappe';

它返回以下内容:

{ column_name: 'id', data_type: 'bigint' }

我怎样才能得到所有的结果?可以用Javascript库调用这个函数吗?

z9ju0rcb

z9ju0rcb1#

这就是如何使用Supabase函数从Postgres中获取列及其类型的列表,要实现这一点,可以从Postgres的information_schema.columns表中获取数据。

CREATE OR REPLACE FUNCTION get_types(tname text)
    RETURNS TABLE ( column_name text,data_type text ) AS 
    $BODY$
      BEGIN
          RETURN QUERY EXECUTE format($$SELECT column_name::text,data_type::text FROM information_schema.columns WHERE table_name ='$$|| '%I' ||$$';$$,tname);
      END;
    $BODY$
    LANGUAGE plpgsql;

请注意,这是一个更高级的函数,您应该使用SQL编辑器或PSQL部署它,而不是使用Supabase UI(返回类型table/setof在那里不可用)。以下是在SQL中调用此函数的结果:

因为这是一个Postgres函数,所以可以使用Supabase Javascript API for RPC调用它:

const { data, error } = await supabase
    .rpc('get_types', {tname: 'frappe'})

结果:

[
  { column_name: 'cnt', data_type: 'bigint' },
  { column_name: 'item', data_type: 'text' },
  { column_name: 'daytime', data_type: 'text' },
  { column_name: 'weekday', data_type: 'text' },
  { column_name: 'isweekend', data_type: 'text' },
  { column_name: 'homework', data_type: 'text' },
  { column_name: 'cost', data_type: 'text' },
  { column_name: 'weather', data_type: 'text' },
  { column_name: 'country', data_type: 'text' },
  { column_name: 'user', data_type: 'text' },
  { column_name: 'city', data_type: 'text' }
]

相关问题