---
name: "SQL::Translator::Producer::GraphViz"
section: "3pm"
platform: "linux"
package: "libsql-translator-perl"
version: "1.66-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SQL::Translator::Producer::GraphViz"
---

# SQL::Translator::Producer::GraphViz(3pm)

GraphViz producer for SQL::Translator

## NAME

SQL::Translator::Producer::GraphViz - GraphViz producer for SQL::Translator

## SYNOPSIS

```
  use SQL::Translator;
  my $trans = SQL::Translator->new(
      from => 'MySQL',            # or your db of choice
      to   => 'GraphViz',
      producer_args => {
          out_file         => 'schema.png',
          bgcolor          => 'lightgoldenrodyellow',
          show_constraints => 1,
          show_datatypes   => 1,
          show_sizes       => 1
      }
  ) or die SQL::Translator->error;
  $trans->translate or die $trans->error;
```

## DESCRIPTION

Creates a graph of a schema using the amazing graphviz (see http://www.graphviz.org/) application (via the GraphViz module).  It's nifty--you should try it!

## PRODUCER ARGS

All GraphViz constructor attributes are accepted and passed through to "new" in GraphViz. The following defaults are assumed for some attributes:

```
  layout => 'dot',
  overlap => 'false',
  node => {
    shape => 'record',
    style => 'filled',
    fillcolor => 'white',
  },
  # in inches
  width => 8.5,
  height => 11,
```

See the documentation of "new" in GraphViz for more info on these and other attributes.

In addition this producer accepts the following arguments:

- •

  skip\_tables

  An arrayref or a comma-separated list of table names that should be skipped. Note that a skipped table node may still appear if another table has foreign key constraints pointing to the skipped table. If this happens no table field/index information will be included.

- •

  skip\_tables\_like

  An arrayref or a comma-separated list of regular expressions matching table names that should be skipped.

- •

  cluster

  Clustering of tables allows you to group and box tables according to function or domain or whatever criteria you choose.  The syntax for clustering tables is:

  ```
    cluster => 'cluster1=table1,table2;cluster2=table3,table4'
  ```

  Or pass it as an arrayref like so:

  ```
    cluster => [ 'cluster1=table1,table2', 'cluster2=table3,table4' ]
  ```

  Or like so:

  ```
    cluster => [
      { name => 'cluster1', tables => [ 'table1', 'table2' ] },
      { name => 'cluster2', tables => [ 'table3', 'table4' ] },
    ]
  ```

- •

  out\_file

  The name of the file where the resulting GraphViz output will be written. Alternatively an open filehandle can be supplied. If undefined (the default) - the result is returned as a string.

- •

  output\_type (DEFAULT: 'png')

  This determines which output method will be invoked to generate the graph: `"png"` translates to `"as_png"`, `"ps"` to `"as_ps"` and so on.

- •

  fontname

  This sets the global font name (or full path to font file) for node, edge, and graph labels

- •

  fontsize

  This sets the global font size for node and edge labels (note that arbitrarily large sizes may be ignored due to page size or graph size constraints)

- •

  show\_fields (DEFAULT: true)

  If set to a true value, the names of the columns in a table will be displayed in each table's node

- •

  show\_fk\_only

  If set to a true value, only columns which are foreign keys will be displayed in each table's node

- •

  show\_datatypes

  If set to a true value, the datatype of each column will be displayed next to each column's name; this option will have no effect if the value of `"show_fields"` is set to false

- •

  friendly\_ints

  If set to a true value, each integer type field will be displayed as a tinyint, smallint, integer or bigint depending on the field's associated size parameter. This only applies for the `"integer"` type (and not the `"int"` type, which is always assumed to be a 32-bit integer); this option will have no effect if the value of `"show_fields"` is set to false

- •

  friendly\_ints\_extended

  If set to a true value, the friendly ints displayed will take into account the non-standard types, 'tinyint' and 'mediumint' (which, as far as I am aware, is only implemented in MySQL)

- •

  show\_sizes

  If set to a true value, the size (in bytes) of each CHAR and VARCHAR column will be displayed in parentheses next to the column's name; this option will have no effect if the value of `"show_fields"` is set to false

- •

  show\_constraints

  If set to a true value, a field's constraints (i.e., its primary-key-ness, its foreign-key-ness and/or its uniqueness) will appear as a comma-separated list in brackets next to the field's name; this option will have no effect if the value of `"show_fields"` is set to false

- •

  show\_indexes

  If set to a true value, each record will also show the indexes set on each table. It describes the index types along with which columns are included in the index.

- •

  show\_index\_names (DEFAULT: true)

  If `"show_indexes"` is set to a true value, then the value of this parameter determines whether or not to print names of indexes. if `"show_index_names"` is false, then a list of indexed columns will appear below the field list. Otherwise, it will be a list prefixed with the name of each index.

- •

  natural\_join

  If set to a true value, "make\_natural\_joins" in SQL::Translator::Schema will be called before generating the graph.

- •

  join\_pk\_only

  The value of this option will be passed as the value of the like-named argument to "make\_natural\_joins" in SQL::Translator::Schema; implies `"natural_join => 1"`

- •

  skip\_fields

  The value of this option will be passed as the value of the like-named argument to "make\_natural\_joins" in SQL::Translator::Schema; implies `"natural_join => 1"`

### DEPRECATED ARGS

- •

  node\_shape

  Deprecated, use node =\> { shape =\> ... } instead

- •

  add\_color

  Deprecated, use bgcolor =\> 'lightgoldenrodyellow' instead

  If set to a true value, the graphic will have a background color of 'lightgoldenrodyellow'; otherwise the default white background will be used

- •

  nodeattrs

  Deprecated, use node =\> { ... } instead

- •

  edgeattrs

  Deprecated, use edge =\> { ... } instead

- •

  graphattrs

  Deprecated, use graph =\> { ... } instead

## AUTHOR

Ken Youens-Clark \<kclark@cpan.org\>

Jonathan Yu \<frequency@cpan.org\>

## SEE ALSO

SQL::Translator, GraphViz
