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):
Postgresprisma CLI: prisma/1.26.3 (windows-x64) node-v8.9.4Windows 10Adding stacktrace with DEBUG="*"
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
````
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.
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.
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.
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

But I was unable to reproduce this with prisma introspect

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
Most helpful comment
Any news about it? I must use it without
-ioption to automate any database change.