Проблема миграции Prisma 1 в 2: P4001 Интроспектированная база данных пуста

Итак, я пытался запустить процесс самоанализа на моей существующей базе данных следующим образом:

npx prisma introspect

и получил следующую трассировку ошибки:

0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli   'C:\\Users\\d0475\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli   'run',
1 verbose cli   'introspect' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'preintrospect', 'introspect', 'postintrospect' ]
5 info lifecycle [email protected]~preintrospect: [email protected]
6 info lifecycle [email protected]~introspect: [email protected]
7 verbose lifecycle [email protected]~introspect: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~introspect: PATH: C:\Users\d0475\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;C:\Users\d0475\Documents\Projects\flamingo-ecom2\sick-fits\backend\node_modules\.bin;C:\Users\d0475\Documents\Cmder\bin;C:\Program Files\Git\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Git\share\vim\vim74;C:\Users\d0475\Documents\Cmder\vendor\conemu-maximus5\ConEmu\Scripts;C:\Users\d0475\Documents\Cmder\vendor\conemu-maximus5;C:\Users\d0475\Documents\Cmder\vendor\conemu-maximus5\ConEmu;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Calibre2\;C:\WINDOWS\System32\LibreSSL\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Program Files (x86)\Gpg4win\..\GnuPG\bin;C:\Program Files\Git\cmd;C:\Users\d0475\AppData\Local\Microsoft\WindowsApps;C:\Users\d0475\AppData\Local\Microsoft\WindowsApps;;C:\Users\d0475\AppData\Local\now-cli;C:\Program Files\Heroku\bin;C:\Program Files\Microsoft VS Code\bin;C:\Users\d0475\AppData\Local\hyper\app-2.0.0\resources\bin;C:\Users\d0475\AppData\Roaming\npm;C:\Users\d0475\AppData\Local\Yarn\bin;C:\Users\d0475\Documents\Cmder
9 verbose lifecycle [email protected]~introspect: CWD: C:\Users\d0475\Documents\Projects\flamingo-ecom2\sick-fits\backend
10 silly lifecycle [email protected]~introspect: Args: [ '/d /s /c', 'npx prisma introspect' ]
11 silly lifecycle [email protected]~introspect: Returned: code: 1  signal: null
12 info lifecycle [email protected]~introspect: Failed to exec introspect script
13 verbose stack Error: [email protected] introspect: `npx prisma introspect`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (C:\Users\d0475\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\index.js:301:16)
13 verbose stack     at EventEmitter.emit (events.js:198:13)
13 verbose stack     at ChildProcess.<anonymous> (C:\Users\d0475\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14)
13 verbose stack     at ChildProcess.emit (events.js:198:13)
13 verbose stack     at maybeClose (internal/child_process.js:982:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
14 verbose pkgid [email protected]
15 verbose cwd C:\Users\d0475\Documents\Projects\flamingo-ecom2\sick-fits\backend
16 verbose Windows_NT 10.0.18362
17 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\d0475\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js" "run" "introspect"
18 verbose node v10.16.0
19 verbose npm  v6.5.0
20 error code ELIFECYCLE
21 error errno 1
22 error [email protected] introspect: `npx prisma introspect`
22 error Exit status 1
23 error Failed at the [email protected] introspect script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

Затем я попытался запустить запрос на детской площадке, который выдал следующую ошибку трассировки:

  Stack:
Invalid `prisma.item.findMany()` invocation in
C:/Users/d0475/Documents/Projects/flamingo-ecom2/sick-fits/backend/node_modules/nexus-plugin-prisma/src/schema/builder.ts:343:79
  339 }
  340
  341 args = this.paginationStrategy.resolve(args)
  342
→ 343 return photon[mappedField.photonAccessor][mappedField.operation](args
  Error occurred during query execution:
ConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(Error { kind: Db, cause: Some(DbError { severity: "ERROR", parsed_severity: Some(Error), code: SqlState("42P01"), message: "relation /"public.Item/" does not exist", detail: None, hint: None, position: Some(Original(717)), where_: None, schema: None, table: None, column: None, datatype: None, constraint: None, file: Some("parse_relation.c"), line: Some(1159), routine: Some("parserOpenTable") }) }) })
    at PrismaClientFetcher.request (C:/Users/d0475/Documents/Projects/flamingo-ecom2/sick-fits/backend/node_modules/@prisma/client/src/runtime/getPrismaClient.ts:906:15)

Таким образом, процесс по умолчанию пытается получить доступ к общедоступной схеме (message: "relation /"public.Item/" does not exist"), в которой у меня нет информации о таблицах / данных. Вся информация о моих таблицах / данных находится в my-schema$prod. Сначала я предположил, что мне нужно изменить search_path базы данных, чтобы включить my-schema: "$user", "my-schema$prod", public, но это ничего не решило.

В идеале мне нужно указать схему в источнике данных как:

datasource db {
  provider = "postgresql"
  schema = "my-schema$prod"
  url      = env("DATABASE_URL")
}

Как мне решить эту проблему?


person TheoG    schedule 15.07.2020    source источник


Ответы (1)


Проблема была решена путем добавления параметра схемы в URI:

postgresql://myuser:[email protected]:5432/mydb?schema=my-schema$prod
person TheoG    schedule 15.07.2020
comment
Спасибо, что поделились своим решением @TheoG! Я написал руководства по обновлению в документации Prisma - вы их использовали, и если да, то как, по вашему мнению, можно было предотвратить вашу проблему? :) - person nburk; 15.07.2020
comment
Привет, @nburk, спасибо за ответ. Да, в настоящее время я использую документы по обновлению по мере ввода. Уведомление о дополнительных параметрах, которые можно использовать с URI в 'Prisma Schema - prisma.io/docs/reference/tools-and-interfaces/prisma-schema", например, было бы достаточно. - person TheoG; 15.07.2020
comment
Отлично, надеюсь, документы вам пригодятся! Кстати, аргумент schema для строк подключения PostgreSQL описан как часть документации по обновлению здесь. Вы использовали эту страницу в процессе обновления? Вы перечитали эту часть или у вас есть идея, как сделать ее более заметной, чтобы люди не упускали ее из виду в будущем? - person nburk; 16.07.2020
comment
Честно говоря, я, возможно, сначала бегло просмотрел эту страницу, но остановился на ссылке, которую я предоставил выше, поскольку в то время она казалась немного более простой. Я думаю, что проблема в том, что, похоже, одни и те же вещи говорят немного по-разному. Например, в примерах github prisma используется prisma @ client, но при просмотре документации (ссылки, упомянутые выше) вы внезапно сталкиваетесь с nexus-plugin-prisma, поэтому вас бросают в совершенно другую кроличью нору. - person TheoG; 17.07.2020
comment
@nburk Не могли бы вы проинформировать меня о следующей проблеме с преобразованием, которая у меня возникла? stackoverflow.com/questions/62950242/ - person TheoG; 17.07.2020