@@ -387,7 +387,7 @@ let setOrThrow = async (sql, ~items, ~table: Table.table, ~itemSchema, ~pgSchema
387
387
raise (
388
388
Persistence .StorageError ({
389
389
message : ` Failed to insert items into table "${table.tableName}"` ,
390
- reason : exn ,
390
+ reason : exn -> Internal . prettifyExn ,
391
391
}),
392
392
)
393
393
}
@@ -455,22 +455,27 @@ let makeSchemaCacheTableInfoQuery = (~pgSchema) => {
455
455
type psqlExecState =
456
456
Unknown | Pending (promise <result <string , string >>) | Resolved (result <string , string >)
457
457
458
- let getPsqlExec = {
458
+ let getConnectedPsqlExec = {
459
+ let pgDockerServiceName = "envio-postgres"
460
+ // Should use the default port, since we're executing the command
461
+ // from the postgres container's network.
462
+ let pgDockerServicePort = 5432
463
+
459
464
// For development: We run the indexer process locally,
460
465
// and there might not be psql installed on the user's machine.
461
466
// So we use docker-compose to run psql existing in the postgres container.
462
467
// For production: We expect indexer to be running in a container,
463
468
// with psql installed. So we can call it directly.
464
469
let psqlExecState = ref (Unknown )
465
- async (~pgUser , ~pgHost ) => {
470
+ async (~pgUser , ~pgHost , ~ pgDatabase , ~ pgPort ) => {
466
471
switch psqlExecState .contents {
467
472
| Unknown => {
468
473
let promise = Promise .make ((resolve , _reject ) => {
469
474
let binary = "psql"
470
475
NodeJs .ChildProcess .exec (` ${binary} --version` , (~error , ~stdout as _ , ~stderr as _ ) => {
471
476
switch error {
472
477
| Value (_ ) => {
473
- let binary = ` docker-compose exec -T -u ${pgUser} ${pgHost } psql`
478
+ let binary = ` docker-compose exec -T -u ${pgUser} ${pgDockerServiceName } psql`
474
479
NodeJs .ChildProcess .exec (
475
480
` ${binary} --version` ,
476
481
(~error , ~stdout as _ , ~stderr as _ ) => {
@@ -479,12 +484,22 @@ let getPsqlExec = {
479
484
resolve (
480
485
Error (` Please check if "psql" binary is installed or docker-compose is running for the local indexer.` ),
481
486
)
482
- | Null => resolve (Ok (binary ))
487
+ | Null =>
488
+ resolve (
489
+ Ok (
490
+ ` ${binary} -h ${pgHost} -p ${pgDockerServicePort-> Js.Int.toString} -U ${pgUser} -d ${pgDatabase}` ,
491
+ ),
492
+ )
483
493
}
484
494
},
485
495
)
486
496
}
487
- | Null => resolve (Ok (binary ))
497
+ | Null =>
498
+ resolve (
499
+ Ok (
500
+ ` ${binary} -h ${pgHost} -p ${pgPort-> Js.Int.toString} -U ${pgUser} -d ${pgDatabase}` ,
501
+ ),
502
+ )
488
503
}
489
504
})
490
505
})
@@ -676,7 +691,7 @@ let make = (
676
691
cacheTablePrefix ++ effectName ,
677
692
~fields = [
678
693
Table .mkField ("id" , Text , ~fieldSchema = S .string , ~isPrimaryKey = true ),
679
- Table .mkField ("output" , JsonB , ~fieldSchema = outputSchema ),
694
+ Table .mkField ("output" , JsonB , ~fieldSchema = S . json (~ validate = false ) ),
680
695
],
681
696
~compositeIndices = [],
682
697
)
@@ -731,7 +746,7 @@ let make = (
731
746
// Command for testing. Run from generated
732
747
// docker-compose exec -T -u postgres envio-postgres psql -d envio-dev -c 'COPY "public"."envio_effect_getTokenMetadata" TO STDOUT (FORMAT text, HEADER);' > ../.envio/cache/getTokenMetadata.tsv
733
748
734
- switch await getPsqlExec (~pgUser , ~pgHost ) {
749
+ switch await getConnectedPsqlExec (~pgUser , ~pgHost , ~ pgDatabase , ~ pgPort ) {
735
750
| Ok (psqlExec ) => {
736
751
Logging .info (
737
752
` Dumping cache: ${cacheTableInfo
@@ -746,7 +761,7 @@ let make = (
746
761
let outputFile =
747
762
NodeJs .Path .join (cacheDirPath , cacheName ++ ".tsv" )-> NodeJs .Path .toString
748
763
749
- let command = ` ${psqlExec} -h ${pgHost} -p ${pgPort -> Js.Int.toString} -U ${pgUser} -d ${pgDatabase} - c 'COPY "${pgSchema}"."${tableName}" TO STDOUT WITH (FORMAT text, HEADER);' > ${outputFile}`
764
+ let command = ` ${psqlExec} -c 'COPY "${pgSchema}"."${tableName}" TO STDOUT WITH (FORMAT text, HEADER);' > ${outputFile}`
750
765
751
766
Promise .make ((resolve , reject ) => {
752
767
NodeJs .ChildProcess .execWithOptions (
@@ -782,7 +797,7 @@ let make = (
782
797
NodeJs .Fs .Promises .readdir (cacheDirPath )
783
798
-> Promise .thenResolve (e => Ok (e ))
784
799
-> Promise .catch (_ => Promise .resolve (Error (nothingToUploadErrorMessage ))),
785
- getPsqlExec (~pgUser , ~pgHost ),
800
+ getConnectedPsqlExec (~pgUser , ~pgHost , ~ pgDatabase , ~ pgPort ),
786
801
)) {
787
802
| (Ok (entries ), Ok (psqlExec )) => {
788
803
let cacheFiles = entries -> Js .Array2 .filter (entry => {
@@ -808,7 +823,7 @@ let make = (
808
823
-> Promise .then (() => {
809
824
let inputFile = NodeJs .Path .join (cacheDirPath , entry )-> NodeJs .Path .toString
810
825
811
- let command = ` ${psqlExec} -h ${pgHost} -p ${pgPort -> Js.Int.toString} -U ${pgUser} -d ${pgDatabase} - c 'COPY "${pgSchema}"."${tableName}" FROM STDIN WITH (FORMAT text, HEADER);' < ${inputFile}`
826
+ let command = ` ${psqlExec} -c 'COPY "${pgSchema}"."${tableName}" FROM STDIN WITH (FORMAT text, HEADER);' < ${inputFile}`
812
827
813
828
Promise .make (
814
829
(resolve , reject ) => {
@@ -827,6 +842,8 @@ let make = (
827
842
})
828
843
})
829
844
-> Promise .all
845
+
846
+ Logging .info ("Successfully uploaded cache." )
830
847
}
831
848
| (Error (message ), _ )
832
849
| (_ , Error (message )) =>
0 commit comments