Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Knex and PostgreSQL: How to drop an unique index?

I have an app using knex for migration. Earlier someone made an unique index on one column using knex.raw like this:

const createProgrammeTable = knex => knex.raw(`
  CREATE TABLE programme (
    id             serial PRIMARY KEY,
    date           date NOT NULL,
    published      date,
    description    text
  );
  CREATE UNIQUE INDEX programme_date_index ON programme(date);
`)

When printing out the db using psql I get this info:

server=# \d programme;
                              Table "public.programme"
  Column   |  Type   | Collation | Nullable |                Default
-----------+---------+-----------+----------+---------------------------------------
 id        | integer |           | not null | nextval('programme_id_seq'::regclass)
 date      | date    |           | not null |
 published | boolean |           | not null |
Indexes:
    "programme_pkey" PRIMARY KEY, btree (id)
    "programme_date_index" UNIQUE, btree (date)

Now I want to remove the unique constraint but I'm not sure how. I've read that I can do this:

ALTER TABLE programme DROP INDEX programme_date_index;

But doing that using knex.raw gives this error:

migration failed with error: ALTER TABLE programme DROP INDEX programme_date_index - syntax error at or near "programme_date_index"
error: ALTER TABLE programme DROP INDEX programme_date_index - syntax error at or near "programme_date_index"
    at Connection.parseE (/Users/my-path/node_modules/pg/lib/connection.js:555:11)
    at Connection.parseMessage (/Users/my-path/node_modules/pg/lib/connection.js:380:19)
    at Socket.<anonymous> (/Users/my-path/node_modules/pg/lib/connection.js:120:22)
    at Socket.emit (events.js:198:13)
    at addChunk (_stream_readable.js:288:12)
    at readableAddChunk (_stream_readable.js:269:11)
    at Socket.Readable.push (_stream_readable.js:224:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
error Command failed with exit code 1.

I've also tried using dropUnique like this:

exports.up = function(knex, Promise) {
  return knex.schema.alterTable("programme", function(t) {
    t.dropUnique("date", "programme_date_index")
  })
}

which gives the following error:

migration failed with error: alter table "programme" drop constraint "programme_date_index" - constraint "programme_date_index" of relation "programme" does not exist

Versions

Knex CLI version: 0.20.15 / Knex Local version: 0.20.15

server=# select version();
                                                     version
------------------------------------------------------------------------------------------------------------------
 PostgreSQL 12.2 (Debian 12.2-2.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit

Can someone please help me/push me in the right direction?

like image 547
Idaswe Avatar asked Oct 20 '25 15:10

Idaswe


1 Answers

export async function down(db: Knex): Promise<void> {
    db.schema.alterTable('tablename', function (t) {
        t.dropUnique([], 'indexname')
    })
}

Incase you're using typescript to remove index.

like image 59
Rahul Purohit Avatar answered Oct 22 '25 03:10

Rahul Purohit



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!