code_junkie

Setting the comment of a column to that of another column in Postgresql

Nov 12th, 2011
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. create table t1 (
  2. c1 varchar(10)
  3. );
  4. comment on column t1.c1 is 'foo';
  5.  
  6. alter table t1 add column c2 varchar(20);
  7.  
  8. select comment_text from (what?) where table_name = 't1' and column_name = 'c1'
  9.  
  10. comment on column t1.c1 is (select ...);
  11.  
  12. CREATE OR REPLACE FUNCTION copy_comment(varchar,int,varchar,varchar) RETURNS int AS $PROC$
  13. DECLARE
  14. src_tbl ALIAS FOR $1;
  15. src_col ALIAS FOR $2;
  16. dst_tbl ALIAS FOR $3;
  17. dst_col ALIAS FOR $4;
  18. row RECORD;
  19. oid INT;
  20. comment VARCHAR;
  21. BEGIN
  22. FOR row IN EXECUTE 'SELECT DISTINCT tableoid FROM ' || quote_ident(src_tbl) LOOP
  23. oid := row.tableoid;
  24. END LOOP;
  25.  
  26. FOR row IN EXECUTE 'SELECT col_description(' || quote_literal(oid) || ',' || quote_literal(src_col) || ')' LOOP
  27. comment := row.col_description;
  28. END LOOP;
  29.  
  30. EXECUTE 'COMMENT ON COLUMN ' || quote_ident(dst_tbl) || '.' || quote_ident(dst_col) || ' IS ' || quote_literal(comment);
  31.  
  32. RETURN 1;
  33. END;
  34. $PROC$ LANGUAGE plpgsql;
  35.  
  36. CREATE OR REPLACE FUNCTION copy_comment(varchar,int,varchar,varchar) RETURNS int AS $PROC$
  37. DECLARE
  38. src_tbl ALIAS FOR $1;
  39. src_col ALIAS FOR $2;
  40. dst_tbl ALIAS FOR $3;
  41. dst_col ALIAS FOR $4;
  42. row RECORD;
  43. oid INT;
  44. comment VARCHAR;
  45. BEGIN
  46. FOR row IN EXECUTE 'SELECT DISTINCT tableoid FROM ' || quote_ident(src_tbl) LOOP
  47. oid := row.tableoid;
  48. END LOOP;
  49.  
  50. FOR row IN EXECUTE 'SELECT col_description(' || quote_literal(oid) || ',' || quote_literal(src_col) || ')' LOOP
  51. comment := row.col_description;
  52. END LOOP;
  53.  
  54. EXECUTE 'COMMENT ON COLUMN ' || quote_ident(dst_tbl) || '.' || quote_ident(dst_col) || ' IS ' || quote_literal(comment);
  55.  
  56. RETURN 1;
  57. END;
  58. $PROC$ LANGUAGE plpgsql;
  59.  
  60. CREATE OR REPLACE FUNCTION copy_comment(varchar,int,varchar,varchar) RETURNS int AS $PROC$
  61. DECLARE
  62. src_tbl ALIAS FOR $1;
  63. src_col ALIAS FOR $2;
  64. dst_tbl ALIAS FOR $3;
  65. dst_col ALIAS FOR $4;
  66. row RECORD;
  67. oid INT;
  68. comment VARCHAR;
  69. BEGIN
  70. FOR row IN EXECUTE 'SELECT DISTINCT tableoid FROM ' || quote_ident(src_tbl) LOOP
  71. oid := row.tableoid;
  72. END LOOP;
  73.  
  74. FOR row IN EXECUTE 'SELECT col_description(' || quote_literal(oid) || ',' || quote_literal(src_col) || ')' LOOP
  75. comment := row.col_description;
  76. END LOOP;
  77.  
  78. EXECUTE 'COMMENT ON COLUMN ' || quote_ident(dst_tbl) || '.' || quote_ident(dst_col) || ' IS ' || quote_literal(comment);
  79.  
  80. RETURN 1;
  81. END;
  82. $PROC$ LANGUAGE plpgsql;
Add Comment
Please, Sign In to add comment