docs: def library_pg(args, l, config):
      """Report on the operation of a Postgres Library database"""
      import tabulate
      import terminaltables
      from textwrap import fill
      from ambry.util.text import getTerminalSize
      import sys
  
      if args.connect:
          try:
              l.database.connection.execute('SELECT * FROM pg_stat_activity;')
              sys.exit(0)
          except Exception as e:
              prt(str(e))
              sys.exit(1)
  
      db = l.database
  
      (x, y) = getTerminalSize()
  
      if args.processes:
  
          headers = None
          rows = []
  
          for row in db.connection.execute('SELECT pid, client_addr, application_name ass, query FROM pg_stat_activity '):
              if not headers:
                  headers = row.keys()
              row = list(str(e) for e in row)
  
              row[3] = fill(row[3],x-50)
              rows.append(row)
  
          #print tabulate.tabulate(rows, headers)
          table =  terminaltables.UnixTable([headers]+rows)
          print table.table
  
      if args.blocks:
  
          headers = None
          rows = []
  
          q1 = """
  SELECT pid, database, mode, locktype, mode, relation, tuple, virtualxid FROM pg_locks order by pid;
  """
  
  
          q2 = """
    SELECT blocked_locks.pid     AS blocked_pid,
           -- blocked_activity.usename  AS blocked_user,
           blocking_locks.pid     AS blocking_pid,
           -- blocking_activity.usename AS blocking_user,
           blocked_activity.query    AS blocked_statement,
           blocking_activity.query   AS current_statement_in_blocking_process
     FROM  pg_catalog.pg_locks         blocked_locks
      JOIN pg_catalog.pg_stat_activity blocked_activity  ON blocked_activity.pid = blocked_locks.pid
      JOIN pg_catalog.pg_locks         blocking_locks
          ON blocking_locks.locktype = blocked_locks.locktype
          AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
          AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
          AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
          AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
          AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
          AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
          AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
          AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
          AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
          AND blocking_locks.pid != blocked_locks.pid
  
      JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
     WHERE NOT blocked_locks.GRANTED;
  
  """
  
          for row in db.connection.execute(q2):
              if not headers:
                  headers = row.keys()
              row = list(str(e) for e in row)
  
              row[2] = fill(row[2],(x-50)/2)
              row[3] = fill(row[3], (x-50)/2)
              rows.append(row)
  
          if rows:
              table = terminaltables.UnixTable([headers] + rows)
              print table.table
  
      if args.locks:
  
              headers = None
              rows = []
  
              q = """
      SELECT pid, database, mode, locktype, mode, relation::regclass, tuple, virtualxid
      FROM pg_locks
      ORDER BY pid
      ;
      """
  
  
              for row in db.connection.execute(q):
                  if not headers:
                      headers = row.keys()
                  row = list(str(e) for e in row)
  
                  row[2] = fill(row[2], (x - 50) / 2)
                  row[3] = fill(row[3], (x - 50) / 2)
                  rows.append(row)
  
              if rows:
                  table = terminaltables.UnixTable([headers] + rows)
                  print table.table