6

I'm trying to create a schema with a POINT datatype & knex just doesn't seem to be creating it in the DB. However it's creating all the other fields.

Here is what my migration file looks like:

exports.up = (knex, Promise) => {
  return Promise.all([
    knex.schema.createTableIfNotExists('users', (table) => {
      table.uuid('id').primary()
      table.string('username', 35)
      table.text('pword').notNullable()
      table.string('first_name', 55)
      table.string('last_name', 55)
      knex.schema.raw('coordinates POINT DEFAULT POINT (37.3875, -122.0575)')
      table.timestamp('date_created').defaultTo(knex.fn.now())
    })
  ])
}

exports.down = (knex, Promise) => {
  return Promise.all([
    knex.schema.dropTableIfExists('users')
  ])
}

Here is the line of code which is failing:

knex.schema.raw('coordinates POINT DEFAULT POINT (37.3875, -122.0575)')

I've also tried removing the schema attribute:

knex.raw('coordinates POINT DEFAULT POINT (37.3875, -122.0575)')

There are no errors printed out, it just seems to fail silently.

Edit 1:

I printed this out using: knex.schema.raw('coordinates POINT DEFAULT POINT (37.3875, -122.0575)').then(data => console.log(data)).catch(error => console.log(error))

{ error: coordinates POINT DEFAULT POINT (37.3875, -122.0575) - syntax error at or near "coordinates"
    at Connection.parseE (/Users/james/plural/backend-development/node_modules/pg/lib/connection.js:554:11)
    at Connection.parseMessage (/Users/james/plural/backend-development/node_modules/pg/lib/connection.js:381:17)
    at Socket.<anonymous> (/Users/james/plural/backend-development/node_modules/pg/lib/connection.js:117:22)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at readableAddChunk (_stream_readable.js:172:18)
    at Socket.Readable.push (_stream_readable.js:130:10)
    at TCP.onread (net.js:542:20)
  name: 'error',
  length: 92,
  severity: 'ERROR',
  code: '42601',
  detail: undefined,
  hint: undefined,
  position: '1',
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'scan.l',
  line: '1081',
  routine: 'scanner_yyerror' }

1 Answer 1

14

Try this instead:

table.specificType('coordinates', 'POINT').defaultTo(knex.raw('POINT (37.3875, -122.0575)'))

For the SQL types not covered by Knex, you can always use the following format:

table.specificType('column_name', 'TYPE')

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.