code: func RunTxPostgres(tx *sql.Tx, nodes []graphlog.NodeUpdate, quads []graphlog.QuadUpdate, opts graph.IgnoreOpts) error {
  	return RunTx(tx, nodes, quads, opts, "")
  }
docs: //func copyFromPG(tx *sql.Tx, in []graph.Delta, opts graph.IgnoreOpts) error {
  //	panic("broken")
  //	stmt, err := tx.Prepare(pq.CopyIn("quads", "subject", "predicate", "object", "label", "id", "ts", "subject_hash", "predicate_hash", "object_hash", "label_hash"))
  //	if err != nil {
  //		clog.Errorf("couldn't prepare COPY statement: %v", err)
  //		return err
  //	}
  //	for _, d := range in {
  //		s, p, o, l, err := marshalQuadDirections(d.Quad)
  //		if err != nil {
  //			clog.Errorf("couldn't marshal quads: %v", err)
  //			return err
  //		}
  //		_, err = stmt.Exec(
  //			s,
  //			p,
  //			o,
  //			l,
  //			d.ID.Int(),
  //			d.Timestamp,
  //			hashOf(d.Quad.Subject),
  //			hashOf(d.Quad.Predicate),
  //			hashOf(d.Quad.Object),
  //			hashOf(d.Quad.Label),
  //		)
  //		if err != nil {
  //			err = convInsertErrorPG(err)
  //			clog.Errorf("couldn't execute COPY statement: %v", err)
  //			return err
  //		}
  //	}
  //	_, err = stmt.Exec()
  //	if err != nil {
  //		err = convInsertErrorPG(err)
  //		return err
  //	}
  //	_ = stmt.Close() // COPY will be closed on last Exec, this will return non-nil error in all cases
  //	return nil
  //}