여기에 열 이름에 대한 텍스트 [] 배열을 사용하여 여러 열이 작동하는 수정 된 버전입니다. 또한 새로운 행과 탭을 인쇄하여 출력 형식을 지정합니다.
CREATE OR REPLACE FUNCTION genhtml(text, text, text, text[])
RETURNS text AS $BODY$
DECLARE
schemaname ALIAS FOR $1;
tablename ALIAS FOR $2;
tabletype ALIAS FOR $3;
columnnames ALIAS FOR $4;
result TEXT := '';
searchsql TEXT := '';
var_match TEXT := '';
col RECORD;
header TEXT;
BEGIN
header := E'\t' || '<tr>' || E'\n';
searchsql := $QUERY$SELECT ''$QUERY$;
FOR col IN SELECT attname
FROM pg_attribute AS a
JOIN pg_class AS c ON a.attrelid = c.oid
WHERE c.relname = tablename
AND n.nspname = schemaname
AND c.relkind = tabletype
AND attnum > 0
AND attname = ANY(columnnames)
LOOP
header := header || E'\t\t' || '<th>' || col || '</th>' || E'\n';
searchsql := searchsql || $QUERY$ || E'\n\t\t' || '<td>' || $QUERY$ || col || $QUERY$ || '</td>' $QUERY$;
END LOOP;
header := header || E'\t' || '</tr>' || E'\n';
searchsql := searchsql || ' FROM ' || schemaname || '.' || tablename;
result := '<table>' || E'\n';
result := result || header;
FOR var_match IN EXECUTE(searchsql) LOOP
IF result > '' THEN
result := result || E'\t' || '<tr>' || var_match || E'\n\t' || '</tr>' || E'\n';
END IF;
END LOOP;
result := result || '</table>' || E'\n';
RETURN result;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
전화 뭔가 등으로 기능 :
SELECT genhtml('public', 'tablenamehere', 'r', ARRAY['col1', 'col2', 'col3']);
'R'은 일반 테이블입니다. 대신 VIEW를 사용하는 경우 'v'로 변경하십시오.
해당 함수에'IMMUTABLE' 한정자를 사용하지 마십시오! PostgreSQL은 안전하지 않은 최적화를 만들 수 있습니다. 읽기 : http://www.postgresql.org/docs/9.0/interactive/xfunc-volatility.html – intgr
psql에 -H html 스위치가 있다는 것을 알고 있습니까? 'psql -H -c'select * from table'.' –