# Writable DDN

Another way to modify and re-structure your data is writing directly through DDN, by employing the standard PostgreSQL DML (INSERT/UPDATE/DELETE) and DDL (CREATE/ALTER/DROP) statements on your repositories.

## How it works

By performing a write against the DDN, you essentially create a new latest image containing the desired changes, on top of the existing one directly, without needing to clone/checkout/change/push image locally via sgr.

Besides modifying the table contents (DML), and altering table definitions (DDL), this also lets you create new (private by default) repositories, simply by running CREATE TABLE commands:

CREATE TABLE "splitgraph/my_new_repo".my_new_table
(LIKE "splitgraph/london_wards".city_merged_2018)


Note that some DML statements, namely the above CREATE TABLE ... LIKE and any ALTER TABLE commands, require full materialisation of the target table inside the DDN in order to be executed correctly. Consequently, they don't reap the performance benefits of the layered querying mode used by default in DDN, and can be slower for really large tables.

There are a couple of minor caveats worth noting:

• Writes are only applicable to the latest image. You can reference the repo/image using any one out of the three equivalent approaches.
• Only a single target repo/image per query is supported. In practice this means not chaining multiple write commands delimited by semicolon. You also can't reference more than one table in a DROP TABLE statement.
• The DDN creates one new image per write statement. You can't batch changes.
• The target repository must not be an external one (i.e. not a proxy to a remote live data source).