Prisma1: [1.26.3] introspect doesn't work

Created on 7 Feb 2019  Â·  14Comments  Â·  Source: prisma/prisma1

Describe the bug
The prisma introspect with and without -i option doesn't work. I started my prisma project two weeks ago, and it was working as expected on 1.25.x version, now in 1.26.3 not.

To Reproduce

Wihout interactive mode:

$ prisma introspect
! duplicated mapping key at line 12, column 1:
! datamodel: datamodel-15495479671 ...

With interactive:

$ prisma introspect -i
? What kind of database do you want to introspect? PostgreSQL
? Enter database host localhost
? Enter database port 5432
? Enter database user postgres
? Enter database password XXXXXXX
? Enter database name (the database includes the schema) postgres
? Use SSL? No
? Enter name of existing schema (e.g. default$default) billing
? Please select the schema you want to introspect billing
! Must provide Source. Received: undefined

Versions (please complete the following information):

  • Connector: Postgres
  • Prisma Server: 1.26.3
  • prisma CLI: prisma/1.26.3 (windows-x64) node-v8.9.4
  • OS: Windows 10
bu2-confirmed areintrospection

Most helpful comment

Any news about it? I must use it without -i option to automate any database change.

All 14 comments

Adding stacktrace with DEBUG="*"

prisma introspect

YAMLException: duplicated mapping key at line 12, column 1: datamodel: datamodel-15495479671 ... ^ at generateError (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\js-yaml\lib\js-yaml\loader.js:165:10) at throwError (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\js-yaml\lib\js-yaml\loader.js:171:9) at storeMappingPair (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\js-yaml\lib\js-yaml\loader.js:308:7) at readBlockMapping (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\js-yaml\lib\js-yaml\loader.js:1071:9) at composeNode (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\js-yaml\lib\js-yaml\loader.js:1332:12) at readDocument (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\js-yaml\lib\js-yaml\loader.js:1492:3) at loadDocuments (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\js-yaml\lib\js-yaml\loader.js:1548:5) at load (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\js-yaml\lib\js-yaml\loader.js:1569:19) at Object.safeLoad (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\js-yaml\lib\js-yaml\loader.js:1591:10) at Object.<anonymous> (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\src\yaml.ts:32:21) at step (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\yaml.js:43:23) at Object.next (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\yaml.js:24:53) at C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\yaml.js:18:71 at new Promise (<anonymous>) at __awaiter (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\yaml.js:14:12) at Object.readDefinition (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\yaml.js:64:12) at PrismaDefinitionClass.<anonymous> (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\src\PrismaDefinition.ts:77:43) at step (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\PrismaDefinition.js:32:23) at Object.next (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\PrismaDefinition.js:13:53) at C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\PrismaDefinition.js:7:71 at new Promise (<anonymous>) at __awaiter (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\PrismaDefinition.js:3:12) at PrismaDefinitionClass.loadDefinition (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\PrismaDefinition.js:87:16) at PrismaDefinitionClass.<anonymous> (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\src\PrismaDefinition.ts:66:18) at step (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\PrismaDefinition.js:32:23) at Object.next (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\PrismaDefinition.js:13:53) at C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\PrismaDefinition.js:7:71 at new Promise (<anonymous>) at __awaiter (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\PrismaDefinition.js:3:12) at PrismaDefinitionClass.load (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-yml\dist\PrismaDefinition.js:61:16) at IntrospectCommand.<anonymous> (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-cli-core\src\commands\introspect\introspect.ts:158:29) at step (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-cli-core\dist\commands\introspect\introspect.js:45:23) at Object.next (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-cli-core\dist\commands\introspect\introspect.js:26:53) at C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-cli-core\dist\commands\introspect\introspect.js:20:71 at new Promise (<anonymous>) at __awaiter (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-cli-core\dist\commands\introspect\introspect.js:16:12) at IntrospectCommand.run (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-cli-core\dist\commands\introspect\introspect.js:68:16) at Function.<anonymous> (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-cli-engine\src\Command.ts:67:17) at step (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-cli-engine\dist\Command.js:32:23) at Object.next (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-cli-engine\dist\Command.js:13:53) at fulfilled (C:\Users\XXXXX\AppData\Roaming\npm\node_modules\prisma\node_modules\prisma-cli-engine\dist\Command.js:4:58) at <anonymous> at process._tickDomainCallback (internal/process/next_tick.js:228:7) util timed out +0ms Exiting with code: 0

prisma introspect -i

````
TypeError: Must provide Source. Received: undefined
at Object.parse (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modules\graphql\language\parser.js:46:11)
at RelationalParser.Parser.parseFromSchemaString (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-datamodel\src\datamodel\parser\parser.ts:20:20)
at IntrospectCommand. (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\src\commands\introspect\introspect.ts:235:40)
at step (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\dist\commands\introspect\introspect.js:45:23)
at Object.next (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\dist\commands\introspect\introspect.js:26:53)
at fulfilled (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\dist\commands\introspect\introspect.js:17:58)
at
at process._tickDomainCallback (internal/process/next_tick.js:228:7)
Exiting with code: 1

````

Hi @marticrespi

Can you please provide me with the SQL commands to recreate your database? I am unable to reproduce this with an arbitrary example.

First of all, I created my database schema manually, here you have the script. scriptBBDD.txt

Two weeks ago I generated with prisma introspect this file. datamodel.txt

If I want to relaunch prisma introspect command, it throws me the above errors.

Thanks!

I have started another project, and when I'm starting prisma init I select existing database, I fill all my local database information and it generates my datamodel.prisma successfully. Then, I compose a docker image, and deploy it, at this point all is ok. But can I execute prisma introspect whenever I want, right? Well, if after all this above process I execute it again, it doesn't work.

Here are my introspect and introspect -i stacktraces. In my first report (duplicated key) I was in a try to relaunch the command, prisma included a new key datamodel: datamodelXXXXXXXXX.prisma in my prisma.yml file, without modify my main datamodel:datamodel.prisma. But now It can't connect to the database (without -i option) and my database configuration is the same that in the prisma init command. With -i option, the error is still the same that above.
````
prisma introspect
config CWD D:\TFS_Xtg\Prisma\tgx-billing-2 +0ms
config HOME C:\Users\XXXXX +9ms
config definitionDir D:\TFS_Xtg\Prisma\tgx-billing-2 +1ms
config definitionPath D:\TFS_Xtg\Prisma\tgx-billing-2prisma.yml +1ms
cli { isGlobal: true } +0ms
StatusChecker setting status checker +0ms
cli command id introspect +57ms
cli:plugincache Got plugin from cache +0ms
cli:plugincache C:\Users\XXXXX.cacheprisma\plugins.json +14ms
cli:plugincache Got plugin from cache +17ms
cli:plugincache C:\Users\XXXXX.cacheprisma\plugins.json +1ms
plugins findCommand prisma-cli-core +0ms
plugin requiring command +0ms
cli-engine:plugins:manager requiring C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core +0ms
cli-engine:plugins:manager required +6s
plugin required command +6s
Environment saving global rc +0ms
StatusChecker setting status checker +6s
prisma definition making cluster here +0ms
client Initializing cluster client +0ms
client introspecting { serviceName: 'default',
stageName: 'default',
workspaceSlug: null } +22ms
prisma definition making cluster here +609ms
Error: Could not connect to database. Project not found: 'prisma-temporary-introspection-service$prisma-temporary-test-stage': {"response":{"errors":[{"message":"Project not
found: 'prisma-temporary-introspection-service$prisma-temporary-test-stage'","code":3016,"requestId":"local:cjrvxb6ns00220772fhlzp9bt"}],"status":200},"request":{"query":"{\n __type(name: \"PrismaDatabase\") {\n kind\n enumValues {\n name\n }\n }\n }"}}
at IntrospectCommand. (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\src\commandsintrospectintrospect.ts:192:13)
at step (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\dist\commandsintrospectintrospect.js:45:23)
at Object.throw (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\dist\commandsintrospectintrospect.js:26:53)
at rejected (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\dist\commandsintrospectintrospect.js:18:65)
at
at process._tickDomainCallback (internal/process/next_tick.js:228:7)
util timed out +0ms
Exiting with code: 0

XXXXX@XXXXX-PC MINGW64 /d/TFS_Xtg/Prisma/tgx-billing-2
$ prisma introspect -i
config CWD D:\TFS_Xtg\Prisma\tgx-billing-2 +0ms
config HOME C:\Users\XXXXX +3ms
config definitionDir D:\TFS_Xtg\Prisma\tgx-billing-2 +0ms
config definitionPath D:\TFS_Xtg\Prisma\tgx-billing-2prisma.yml +1ms
cli { isGlobal: true } +0ms
StatusChecker setting status checker +0ms
cli command id introspect +17ms
cli:plugincache Got plugin from cache +0ms
cli:plugincache C:\Users\XXXXX.cacheprisma\plugins.json +0ms
cli:plugincache Got plugin from cache +8ms
cli:plugincache C:\Users\XXXXX.cacheprisma\plugins.json +1ms
plugins findCommand prisma-cli-core +0ms
plugin requiring command +0ms
cli-engine:plugins:manager requiring C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core +0ms
cli-engine:plugins:manager required +5s
plugin required command +5s
Environment saving global rc +0ms
StatusChecker setting status checker +5s
? What kind of database do you want to introspect? PostgreSQL
? Enter database host localhost
? Enter database port 5432
? Enter database user postgres
? Enter database password XXXXXX
? Enter database name (the database includes the schema) postgres
? Use SSL? No
? Enter name of existing schema (e.g. default$default) billing
? Please select the schema you want to introspect billing
TypeError: Must provide Source. Received: undefined
at Object.parse (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modules\graphql\language\parser.js:46:11)
at RelationalParser.Parser.parseFromSchemaString (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-datamodel\src\datamodel\parser\parser.ts:20:20)
at IntrospectCommand. (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\src\commandsintrospectintrospect.ts:235:40)
at step (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\dist\commandsintrospectintrospect.js:45:23)
at Object.next (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\dist\commandsintrospectintrospect.js:26:53)
at fulfilled (C:\Users\XXXXX\AppData\Roaming\npm\node_modulesprisma\node_modulesprisma-cli-core\dist\commandsintrospectintrospect.js:17:58)
at
at process._tickDomainCallback (internal/process/next_tick.js:228:7)
util timed out +0ms
Exiting with code: 0
````

Hi again @marticrespi

I am able to prisma introspect -i regression
image

But I was unable to reproduce this with prisma introspect
image

So I am linking a reproduction for prisma introspect -i
https://github.com/pantharshit00/prisma-issue-4019

If you can try to link similar repro for prisma introspect, that would be awesome 🙂

Hi @pantharshit00

I have tried again with starting guide from prisma. I was able to execute prisma introspect many times, but if I protect it with managementApiSecret on docker-compose.yml file, and with secret keyword on prisma.yml file, throws me again the same error. I have executed export PRISMA_MANAGEMENT_API_SECRET="my-secret" before to try it

$ prisma introspect ! Could not connect to database. Project not found: 'prisma-temporary-introspection-service$prisma-temporary-test-stage': {"response":{"errors":[{"message":"Project not found: ! 'prisma-temporary-introspection-service$prisma-temporary-test-stage'","code":3016,"requestId":"local:cjs01pr6q001d07471d240kvv"}],"status":200},"request":{"query":"{\n __type(name: ! \"PrismaDatabase\") {\n kind\n enumValues {\n name\n }\n }\n }"}}

It's when we protect our prisma server with secret when it throws this error. I have removed the managementApiSecret keyword and then I recreate the docker image, redeployed prisma as well, and I have been able to execute again without any error.

@marticrespi

Can you please try running that again after doing a logout?

Hi @pantharshit00

Same after logout > login.

````
$ prisma logout
You have been successfully logged out.

$ prisma login
Opening https://app.prisma.io/cli-auth?secret=XXXXXXXXXXXXXXXXXXXXX in the browser

Authenticating √
Authenticated with [email protected]
$ prisma introspect
! Could not connect to database. Project not found: 'prisma-temporary-introspection-service$prisma-temporary-test-stage': {"response":{"errors":[{"message":"Project not found:
! 'prisma-temporary-introspection-service$prisma-temporary-test-stage'","code":3016,"requestId":"local:cjs1gpmoq002j0796dtoa6ert"}],"status":200},"request":{"query":"{\n __type(name:
! \"PrismaDatabase\") {\n kind\n enumValues {\n name\n }\n }\n }"}}

Get in touch if you need help: https://www.prisma.io/forum/
To get more detailed output, run $ export DEBUG="*"
````

:(

I think we need to wait now till -i as I can reproduce that one everytime.

Also if there is no existing datamodel file prisma introspect command will break as well.

Cc @divyenduz, I think-i needs a resolution soon as it is usable in the current state

Ok, I will wait for it. I need it as main feature of prisma, I have to automate this process. Where through a request I have to execute the script update-schema-prod to refresh my prisma server..

````
"docker-compose-prod": "cp ./env/prod.env ./.env && docker-compose up -d && sleep 1 && rm ./.env",
"prisma-deploy-prod": "cross-env NODE_ENV=production && prisma generate --env-file ./env/prod.env && prisma deploy --env-file ./env/prod.env",
"update-schema-prod" : "cp ./env/prod.env ./.env && prisma introspect && npm run rename-datamodel && npm run prisma-deploy-prod && sleep 1 && rm ./.env",
"rename-datamodel" : "rm ./datamodel.prisma && mv ./datamodel*.prisma ./datamodel.prisma"

````

Many thanks for all your work guys!

Any news about it? I must use it without -i option to automate any database change.

@pantharshit00

Now with or without -i option launches the interactive mode. Is a temporary solution, isn' it?

@pantharshit00 I have seen your deleted answers in my email. I can't try if works or not, I can't use normal mode as before, always pop up interactive mode.

Closed. #4100

Was this page helpful?
0 / 5 - 0 ratings

Related issues

tbrannam picture tbrannam  Â·  3Comments

sorenbs picture sorenbs  Â·  3Comments

marktani picture marktani  Â·  3Comments

schickling picture schickling  Â·  3Comments

MitkoTschimev picture MitkoTschimev  Â·  3Comments