func (pgDbc PostgresDbConnection) CreateTable(table baseDbConnection.TableDefinition, dbConn *baseDbConnection.DbConnection) error { existingTable, err := dbConn.GetTableDefinition(table.Name) if err != nil { return err } if existingTable.Name != table.Name { sqlCreateTable := "CREATE TABLE IF NOT EXISTS " + dbConn.Schema + "." + table.Name + " (\n" fields := make([]string, 0) primaryKey := make([]string, 0) for _, tableColumn := range table.Columns { fieldDef := "\"" + tableColumn.Name + "\" " + tableColumn.Type if tableColumn.Default != "" { fieldDef += " DEFAULT " + tableColumn.Default } fields = append(fields, fieldDef) if tableColumn.PrimaryKey { primaryKey = append(primaryKey, tableColumn.Name) } } fields = append(fields, "CONSTRAINT pk_"+existingTable.Name+" PRIMARY KEY ("+strings.Join(primaryKey, ",")+")") sqlCreateTable = sqlCreateTable + strings.Join(fields, "\n,") sqlCreateTable = sqlCreateTable + ") WITH (OIDS = FALSE);\n" //TODO: Default Table Grants //TODO: Indexes //TODO: Partitioning _, err := dbConn.Exec(sqlCreateTable) return err } else { return errors.New("Table already exists.") } }