docs: def to_sql(self, frame, name, if_exists='fail', index=True,
                 index_label=None, schema=None, chunksize=None,
                 dtype=None, pk=None, prefixes=None, raise_on_error=True):
          """
          Write records stored in a DataFrame to a SQL database.
  
          Parameters
          ----------
          frame : DataFrame
          name : string
              Name of SQL table
          if_exists : {'fail', 'replace', 'append'}, default 'fail'
              - fail: If table exists, do nothing.
              - replace: If table exists, drop it, recreate it, and insert data.
              - append: If table exists, insert data. Create if does not exist.
          index : boolean, default True
              Write DataFrame index as a column
          index_label : string or sequence, default None
              Column label for index column(s). If None is given (default) and
              `index` is True, then the index names are used.
              A sequence should be given if the DataFrame uses MultiIndex.
          schema : string, default None
              Name of SQL schema in database to write to (if database flavor
              supports this). If specified, this overwrites the default
              schema of the SQLDatabase object.
          chunksize : int, default None
              If not None, then rows will be written in batches of this size at a
              time.  If None, all rows will be written at once.
          dtype : dict of column name to SQL type, default None
              Optional specifying the datatype for columns. The SQL type should
              be a SQLAlchemy type.
          pk: name of column(s) to set as primary keys
          """
          table = pandas.io.sql.SQLTable(name, self, frame=frame, index=index,
                                         if_exists=if_exists, index_label=index_label,
                                         schema=schema, dtype=dtype)
          existed = table.exists()
          table.create()
          replaced = existed and if_exists == 'replace'
  
          table_name = name
          if schema is not None:
              table_name = schema + '.' + table_name
  
          if pk is not None and ((not existed) or replaced):
              if isinstance(pk, str):
                  pks = pk
              else:
                  pks = ", ".join(pk)
              sql = "ALTER TABLE {table_name} ADD PRIMARY KEY ({pks})".format(
                      table_name=table_name, pks=pks)
              self.execute(sql)
  
          from subprocess import Popen, PIPE, STDOUT
  
          columns = frame.index.names + list(frame.columns) if index else frame.columns
          columns = str.join(",", map(lambda c: '"' + c + '"', columns))
  
          sql = "COPY {table_name} ({columns}) FROM STDIN WITH (FORMAT CSV, HEADER TRUE)".format(
                  table_name=table_name, columns=columns)
          p = Popen(['psql', '-c', sql], stdout=PIPE, stdin=PIPE, stderr=STDOUT,
                    universal_newlines=True)
          frame.to_csv(p.stdin, index=index)
  
          psql_out = p.communicate()[0]
          logging.info(psql_out),
  
          r = p.wait()
          if raise_on_error and (r > 0):
              sys.exit(r)
  
          return r