loopback-connector-postgresql icon indicating copy to clipboard operation
loopback-connector-postgresql copied to clipboard

Error in your foreign key creations instructions page.

Open awongCM opened this issue 1 year ago • 1 comments

https://loopback.io/doc/en/lb4/todo-list-tutorial-sqldb.html#specify-the-foreign-key-constraints-in-todo-model In your example below.

@model({
  settings: {
    foreignKeys: {
      fk_todo_todoListId: {
        name: 'fk_todo_todoListId',
        entity: 'TodoList',
        entityKey: 'id',
        foreignKey: 'todoListId',
      },
    },
  },
})
export class Todo extends Entity {
  //etc.
}

When following the setup above to run database migration for my local postgresdb as part of todo example tutorial, I encountered the following error:

Cannot migrate database schema error: column "todoListId" referenced in foreign key constraint does not exist
    at Parser.parseErrorMessage (/Users/andywongcheeming/Projects/poc/todo-list/node_modules/pg-protocol/dist/parser.js:283:98)

I was left puzzled why the instructions did not work as expected. I dig up online and my personal ChatGPT to understand if Postgres DB has case-sensitive when comes to table and field naming conventions. It turns out that it does.

When I go back and check my local postgres todo definitions via psql cli.

todo_db=# \d todo
                  Table "public.todo"
   Column   |  Type   | Collation | Nullable | Default
------------+---------+-----------+----------+---------
 id         | integer |           | not null |
 title      | text    |           | not null |
 desc       | text    |           |          |
 iscomplete | boolean |           |          |
 todolistid | integer |           |          |

It turns our the foreign key todolistid comes out as lower case by default when running Loopback db migration tool. The sample @model code above supplied as {foreignKey: 'todoListId'}.

I corrected it to use lower-case, dropped the database and started the migration all over again. The migration works this time.

Thus, I must ask - shouldn't the instructions be updated to use lowercase since the plugin creates tables and field names in lowercase by default?

awongCM avatar Dec 22 '24 03:12 awongCM

@awongCM, would you like to submit a PR?

dhmlau avatar Jun 02 '25 15:06 dhmlau