以下のentryの関連です。
mysqlの"show create table" のpostgresにおける代替は、"pg_dump --schema-only" - end0tknr's kipple - web写経開発
mysqlと異なり、postgresでのtableやcolumnへのコメント追加は 「COMMENT ON ~ IS '$comment'」で行うみたい。
テーブル コメント 追加
「%s」の部分には、テーブル名、コメントを指定します
postgrs> COMMENT ON TABLE %s IS '%s'
カラム コメント 追加
「%s」の部分には、テーブル名、カラム名、コメントを指定します
sql> COMMENT ON COLUMN %s.%s IS '%s'
テーブル コメント 参照 - \d+ コマンド
postgres=> \d+ \d+ Schema | Name | Type | Size | Description --------+-------------------------+----------+-----------+---------------------------------- public | gis_chika | table |112 MB | 都道府県地価調査データ public | gis_chika_koji | table |67 MB | 地価公示データ public | gis_gyosei_kuiki | table |314 MB | 行政区域データ public | gis_jinko_shuchu | table |31 MB | 人口集中地区データ public | gis_jinko_suikei_1km | table |697 MB | 1kmメッシュ別将来推計人口データ public | gis_jinko_suikei_500m | table |1840 MB | 500mメッシュ別将来推計人口データ public | gis_tochi_riyo_shousai | table |1375 MB | 土地利用詳細メッシュデータ public | gis_youto_chiiki | table |369 MB | 用途地域データ
カラム コメント 参照 - \d+ コマンド
postgres=> \d+ gis_chika Column | Type | Description ---------+------------------------+---------------------- gid | integer | l02_001 | character varying(3) | l02_002 | character varying(3) | 一連番号 l02_003 | character varying(3) | l02_004 | character varying(3) | 一連番号 l02_005 | character varying(4) | 年度 l02_006 | integer | 調査価格 l02_007 | double precision | 対前年変動率 l02_008 | smallint | l02_009 | character varying(5) | 住居漢字 l02_010 | character varying(5) | 地積 l02_011 | character varying(5) | 利用の現況 l02_012 | character varying(5) | 建物構造 : : :
カラム コメント 参照 - select文
springvue=> select springvue-> isc.column_name, isc.data_type, pd.description springvue-> from information_schema.columns as isc springvue-> left join pg_description as pd springvue-> on ( pd.objsubid=isc.ordinal_position ) springvue-> left join pg_stat_user_tables as psut springvue-> on (pd.objoid=psut.relid and psut.relname=isc.table_name) springvue-> where isc.table_catalog='springvue' and isc.table_name='gis_chika' springvue-> ORDER BY isc.ORDINAL_POSITION; column_name | data_type | description -------------+-------------------+------------------------------------ gid | integer | l02_001 | character varying | DIDid l02_001 | character varying | 基準地域メッシュコード l02_001 | character varying | 分割地域メッシュコード l02_001 | character varying | 行政区域コード l02_001 | character varying | メッシュコード l02_001 | character varying | 都道府県名 l02_002 | character varying | 一連番号 l02_002 | character varying | 支庁・振興局名 l02_002 | character varying | 行政区域コード l02_002 | character varying | 行政区域コード l02_002 | character varying | 行政区域コード l02_002 | character varying | 都道府県名
psycopg2 for python3 で、コメントの登録&参照
#!python # -*- coding: utf-8 -*- import appbase logger = appbase.AppBase.get_logger() class Db(appbase.AppBase): def __init__(self): pass def col_defs(self,tbl_name): conf = self.get_conf() db_conn = self.db_connect() cur = self.db_cursor(db_conn) sql = """ select isc.column_name, isc.data_type, pd.description from information_schema.columns as isc left join pg_description as pd on ( pd.objsubid=isc.ordinal_position ) left join pg_stat_user_tables as psut on (pd.objoid=psut.relid and psut.relname=isc.table_name) where isc.table_catalog=%s and isc.table_name=%s ORDER BY isc.ORDINAL_POSITION """ try: cur.execute(sql, [conf["db"]["db_name"],tbl_name]) except Exception as e: logger.error(e) return [] ret_rows = [] for row in cur.fetchall(): ret_rows.append( dict(row) ) return ret_rows def save_col_comment(self,tbl_name,col_name,comment): logger.info( " ".join([tbl_name,col_name,comment]) ) conf = self.get_conf() db_conn = self.db_connect() cur = self.db_cursor(db_conn) sql = "COMMENT ON COLUMN %s.%s IS '%s'"%(tbl_name,col_name,comment) try: cur.execute(sql) db_conn.commit() except Exception as e: logger.error(" ".join([sql])) logger.error(e) return False return True def save_tbl_comment(self,tbl_name,comment): logger.info( " ".join([tbl_name,comment]) ) conf = self.get_conf() db_conn = self.db_connect() cur = self.db_cursor(db_conn) sql = "COMMENT ON TABLE %s IS '%s'"%(tbl_name,comment) try: cur.execute(sql) db_conn.commit() except Exception as e: logger.error(" ".join([sql])) logger.error(e) return False return True