code: func PgProcParams(db XODB, schema string, proc string) ([]*ProcParam, error) {
  	var err error
  
  	// sql query
  	const sqlstr = `SELECT ` +
  		`UNNEST(STRING_TO_ARRAY(oidvectortypes(p.proargtypes), ', ')) ` + // ::varchar AS param_type
  		`FROM pg_proc p ` +
  		`JOIN ONLY pg_namespace n ON p.pronamespace = n.oid ` +
  		`WHERE n.nspname = $1 AND p.proname = $2`
  
  	// run query
  	XOLog(sqlstr, schema, proc)
  	q, err := db.Query(sqlstr, schema, proc)
  	if err != nil {
  		return nil, err
  	}
  	defer q.Close()
  
  	// load results
  	res := []*ProcParam{}
  	for q.Next() {
  		pp := ProcParam{}
  
  		// scan
  		err = q.Scan(&pp.ParamType)
  		if err != nil {
  			return nil, err
  		}
  
  		res = append(res, &pp)
  	}
  
  	return res, nil
  }
docs: // PgProcParams runs a custom query, returning results as ProcParam.