Quick and dirty create table DDL generator

currently only for postgresql. some more db create table scripts coming soon if possible.

by Ukjin Yang

HTML

TABLE NAME: <input type="text" id="table" value="example_table"><br>
TABLE COMMENT: <input type="text" id="tcomm" value="example comment"><br>
COLUMN AND COMMENT PAIR AS CSV/TSV FORMAT:<br>
<textarea id="columns" rows="10" cols="60"></textarea><br>
PLEASE USE LOWERCASE WHEN USE POSTGRESQL FOR MATCH IDENTIFIER.<br>
GENERATED SQL BELOW:<br>
<textarea id="out" rows="20" cols="80"></textarea>

JavaScript

!function() {
	const $table = document.querySelector('#table'),
        $tcomm = document.querySelector('#tcomm'),
        $columns = document.querySelector('#columns'),
        $out = document.querySelector('#out')
  const change = () => {
  	const cols = []
    for (const col of $columns.value.split('\n')) {
      if (!col || !col.trim() || col.startsWith('#')) continue
    	const [c,m] = col.split(/[,\t]+/)
      if (!c) continue
      cols.push([c, m])
    }
    const comms = cols.filter(([,c]) => c && c.trim())
    $out.textContent = `
CREATE TABLE "${$table.value.trim()}" (
${cols.length ? cols.map(([c]) => `"${c.trim()}" VARCHAR`).join(',\n') : ''}
);
${$tcomm.value ? `COMMENT ON TABLE "${$table.value.trim()}" IS '${$tcomm.value.trim().replaceAll("'", "''")}';` : ''}
${comms.length ? comms.map(([c,m]) => `COMMENT ON COLUMN "${$table.value.trim()}"."${c}" IS '${m.trim().replaceAll("'", "''")}';`).join('\n') : ''}
`.trim() + '\n'
  }
  [$table, $tcomm, $columns].forEach($ => $.addEventListener('change', change))
  $columns.value = [['col1', 'col1 comment'], ['col2', 'col2 comment']].map(a => a.join('\t')).join('\n')
  change()
}()