11 Replies Latest reply on Sep 24, 2015 7:01 AM by Tom Newton

    What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?

    Attila Horváth

      Hello,

      W
      e have ran into problems in the development of our ODBC driver, more precisely when tableau desktop tries to determine SQL compliance by preparing and running test queries. We are asking your kind help on the matter, since sadly we do not know how shall we react to those queries from the driver side in order to make tableau know that we couldn't run specific queries and so fort make it realize the driver's SQL compliance level without unexpected termination through the checking progress.


      As a standard ODBC driver i assume from the documentation:
      SQLPrepare Function
      (please correct me on this one if its not true), if a query cannot be prepared, the driver shall give back sql_error :

       

      42000

      Syntax error or access violation

      *StatementText contained an SQL statement that was not preparable or contained a syntax error.

      *StatementText contained a statement for which the user did not have the required privileges.


      This error code seems to be not working for Tableau for us at least. We would really appreciate if anybody could let us know what error code should we return, or what should we do in order to be able to communicate SQL compliance to tableau desktop, besides tdc file method, which we already know about and use.

       

      For the error codes of sqlprepare function i have tried to return most of them, but neither of them showed any change in tableau's behavior which resides to:

      Tableau tries to run all test queries and for the ones that we give back sql_error, runs sqldiagrec and sqldiagfield to determine the error codes, however after running some queries and getting back errors it just gives out an error message notifying the user about that the underlying connection is not okay or lost.


      First i thought that maybe this is because that the driver needs to at least give back sql_success results for some of the test queries so i implemented fake results for them, to make it comply and let tableau be able to fetch results, but this didn't solve the problem, since there were still queries i couldn't fake.

       

      The only SQL commands that our driver can support right now @are basic select queries without aliases and sub-queries, but with where conditions.

       

      What i know about SQL compliance of an ODBC driver so far:

      Any user who wants to know sql compliance of an ODBC driver can use the sqlgetinfo properties:

       

      SQL_DATA_SOURCE_READ_ONLY  ( does tableau use this property? i couldn't find any clues about this one in my driver's logs )
      SQL_SQL_CONFORMANCE ( i could find out that tableau gets this property however it seems it doesn't change the SQL compliance determination procedure )

      SQL Minimum Grammar

       

       

      We would be more then happy If you could correct, or provide any additional information about the matter,

       

      Thank you for your precious time and help,

       

      Attila

      Robert Morton

        • 1. Re: What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?
          Robert Morton

          Hi Attila,

           

          I'll discuss several aspects of Tableau's approach to general-purpose ODBC data sources, but first I have a few recommendations. Consider setting CAP_SUPPRESS_DISCOVERY_QUERIES to 'yes' to prevent Tableau from attempting to determine support for functionality via trial & error queries. Next, set CAP_SUPPRESS_DISPLAY_LIMITATIONS to 'yes' if you wish to prevent Tableau from warning the user that their connection may have very limited functionality. Your users will need to know that they must immediately create an extract if they wish to build visualizations using such a limited data source.

           

          Now some background.

           

          Why does Tableau issue those discovery queries? In some cases, they are required to determine support for important functionality that is not expressed in the SQL and ODBC standards, such as syntax for a row-limiting clause (TOP or LIMIT). In other cases, Tableau tries to detect functionality which may be known to work in general, but a given user may not have permission to use (e.g. temporary tables). In most of these cases, Tableau will skip the discovery queries for a specific feature if it has been explicitly defined as enabled/disabled in the TDC customizations. In the two examples I gave, setting these capabilities will suppress Tableau's discovery queries for those features: CAP_QUERY_TOPSTYLE_TOP and CAP_CREATE_TEMP_TABLES. So following my initial recommendation to set CAP_SUPPRESS_DISCOVERY_QUERIES to 'yes', you should also set the various CAP_* capabilities to 'yes' / 'no' (instead of omitting them entirely from your TDC file) to let Tableau know about the supported features given that discovery queries have been suppressed.

           

          Next, what does Tableau do with driver-reported SQL compliance information? Tableau uses this to know what features are supported by default, including certain aggregations, scalar functions and data types. But even a minimum-level compliant data source can offer certain functionality found in higher levels of compliance, which is why Tableau inspects these features individually with a series of calls to SQLGetInfo.

           

          Now let's discuss SQLPrepare. Tableau will prepare a query before executing it, primarily to enable the user to cancel the query. If SQLPrepare is not supported by a data source, Tableau will still attempt to execute the query directly but will be unable to cancel the query. Consider having your data source return an error with SQLPrepare that indicates that the function is unsupported, e.g. a SQL_ERROR with SQLSTATE set to 'IM001'. If your driver instead returns an error code that indicates a syntax error in the query, Tableau may assume that SQLPrepare is supported but the query itself was invalid.

           

          Regarding aliases in the SELECT list, this is a feature Tableau expects the driver to support. However you may be able to ignore those in your query (and produce a result set with fake / auto-generated column names) as long as you set CAP_QUERY_SELECT_ALIASES_SORTED to 'yes'. This informs Tableau that it won't be able to find the expected column names in the query result set, so it must instead resort to finding them based on their ordinal position in the result set. Each column must appear in the result set in the same order that they are expressed in the query, or this technique won't work.

           

          Finally, a few quick points. Tableau does not inspect SQL_DATA_SOURCE_READ_ONLY. Tableau requires subquery support for Custom SQL connections, but if you don't support this functionality then be sure to set CAP_QUERY_SUBQUERIES to 'no'. In general you should set all CAP_* capabilities listed in the documentation to either 'yes' or 'no' based on what you know your driver supports.

           

          Good luck,

          Robert

           

          CC: Tamas Foldi, Ted Wasserman, Logan Riggs, Lindsay Nall, rajiv.badi

          • 2. Re: Re: What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?
            Attila Horváth

            Hi Robert,


            First of all thank you for the information, it gave me quite a bit of knowledge,

            but please let me emphasize some things that may not be clear about my question:

            "Consider having your data source return an error with SQLPrepare that indicates that the function is unsupported, e.g. a SQL_ERROR with SQLSTATE set to 'IM001'. If your driver instead returns an error code that indicates a syntax error in the query, Tableau may assume that SQLPrepare is supported but the query itself was invalid."


            This is the behavior i'm trying to get, i would like to tell tableau that the query is not supported but SQLPrepare itself is.

            Also i am hoping for a way to get around the TDC file usage itself by providing proper answers for the test queries and providing proper information from driver side, that i'm having a difficult time with.

            Thank you again,


            Attila


            • 3. Re: What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?
              Tamas Foldi

              Attila, correct me if I wrong but your problem is that without TDC files even if you return an error code from the driver Tableau still tries to use that feature. Am I misunderstanding something?

               

              Robert, the goal would be to pass all these driver discovery queries by throwing errors so Tableau will fall back to automatic extract generation. So there will be no need of TDC files at all (which are not working for us on Server as you know from different thread)

              • 5. Re: What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?
                Tamas Foldi

                Attila, please upload the entire process flow:

                • What SQL statements were called from Tableau
                • What was the response from your ODBC Driver
                • All matching log file entry from Tableau and ODBC trace logs

                 

                I think the problem is easy: tableau wants to check some capabilities, you return that the Driver cannot do that, but Tableau still use it. So we must know which error codes needed where.

                • 6. Re: Re: What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?
                  Attila Horváth

                  Hello,

                   

                  I moved the TDC file so now it's not in use, this is how our driver and tableau desktop communicate:


                  Tableau tries to run a test query, that we cannot prepare or execute, we give back SQL_ERROR from SQLPrepare, then tableau gets the error's SQL_DIAG_SQLSTATE with sqlgetdiagfield and sqlgetdiagrec and then sqlgetdiagrec again (which i don't understand), all of them return one record with sqlstate 42000, then after tableau got the information, terminates by freeing the corresponding handle. I can see from the ODBC trace log that the information gets to tableau in the right format, although i don't know if it's the right error code to return, saying that the query is not valid for our driver. I attached the logs representing the same parts from both the ODBC trace log and both the drivers log.

                  • 7. Re: Re: What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?
                    Robert Morton

                    Hi Attila,

                     

                    Please file a request with Support to address the challenge with having the backgrounder load and apply TDC files.

                     

                    As for the broader effort of developing an ODBC driver for use with Tableau, we really can't engage as deeply as you require unless you become an approved technology partner. Your questions go far beyond the dialog we typically have with customers who are simply trying to get 3rd party drivers (over which they have no control) to work well with Tableau. Since you are developing the ODBC driver, you should explore whether or not you're a fit for our partner program and use that channel to start a more direct communication about how to continue improving your integration with the Tableau connection layers.

                     

                    In the meantime, I'll suggest a way you can discover a bit more about how Tableau interrogates a driver and handles various ODBC APIs. As you become more familiar with the ODBC API tracing mechanism in Windows, consider experimenting with different Tableau connection attempts via generic ODBC to freely available data sources such as MySQL, PostgreSQL, SQLite, or to any proprietary data sources you have already installed and licensed. Compare the API trace from those connection attempts with the API trace from your attempt to connect Tableau to your ODBC driver.

                     

                    Good luck,

                    Robert

                    • 8. Re: Re: Re: What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?
                      Tamas Foldi

                      Please file a request with Support to address the challenge with having the backgrounder load and apply TDC files.

                       

                       

                       

                       

                      I think Attila already did it but lets give a second try


                      As for the broader effort of developing an ODBC driver for use with Tableau, we really can't engage as deeply as you require unless you become an approved technology partner.

                       

                       


                      Shall I contact Paul Lilford then?


                      In the meantime, I'll suggest a way you can discover a bit more about how Tableau interrogates a driver and handles various ODBC APIs. As you become more familiar with the ODBC API tracing mechanism in Windows, consider experimenting with different Tableau connection attempts via generic ODBC to freely available data sources such as MySQL, PostgreSQL, SQLite, or to any proprietary data sources you have already installed and licensed. Compare the API trace from those connection attempts with the API trace from your attempt to connect Tableau to your ODBC driver.


                      Well, for this I have to find a similar SQL service which also does not support the mandatory SQL elements and forces Tableau to use extracts directly. I cannot compare the trace files with the ones what you have specified as they support most of the capabilities - so this is not the behavior what we'd like to catch. Do you know a less smart SQL service where Tableau always generates extracts?

                       

                      Thanks as always

                      • 9. Re: Re: Re: What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?
                        Robert Morton

                        Hi Tamás,

                         

                        When filing the support request this time, make note that it's not a general Tableau Server problem with TDC files (which was originally interpreted to be a feature request), but rather a specific problem with making the Backgrounder process respect TDC files. Since other components like Vizqlserver do honor TDC files, it's easier to argue that Backgrounder should as well.

                         

                        And yes, please contact Paul or use our Partner Inquiry form: Partner Inquiry | Tableau Software

                         

                        As for finding a similarly limited ODBC connector, that may be difficult. Most ODBC drivers are written with the goal of handling as much functionality as possible when working with a real relational query engine on the back-end.

                         

                        -Robert

                        • 10. Re: What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?
                          Ankit Dixit

                          Hi

                          I am very new to tableau and am getting a very similar problem.

                          I do not know how to set there parameters metioned above for Postgresql.

                          I am facing a similar problem when trying to connect with PostgreSQL, i am getting error :

                          Parse: Prestogres doesn't support extended query

                          I get this error when i try to drag a table. The query it is trying to run is :

                          "SELECT count(*) from (SELECT has_function_privilege('prestogres', 'to_regclass(cstring)', 'execute') WHERE EXISTS(SELECT * FROM pg_catalog.pg_proc AS p WHERE p.proname = 'to_regclass')) AS s"

                          Please find detailed logs below :

                          2015-09-22 12:34:58: pid 14488: DEBUG:  processing frontend response

                          2015-09-22 12:34:58: pid 14488: DETAIL:  received kind 'Q'(51) from frontend

                          2015-09-22 12:34:58: pid 14488: DEBUG:  session context: clearing doing extended query messaging. DONE

                          2015-09-22 12:34:58: pid 14488: LOG:  statement: select oid, typbasetype from pg_type where typname = 'lo'

                          2015-09-22 12:34:58: pid 14488: DEBUG:  session context: setting query in progress. DONE

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: extended:0 query:"select 1 from (select prestogres_catalog.setup_system_catalog(E'127.0.0.1:8081', E'prestogres', E'hive', E'hive', E'prestogres')) s;"

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'T'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received ROW DESCRIPTION ('T')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: row description: num_fileds: 1

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'N'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'N'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'N'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'N'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'N'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'N'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'N'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'D'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received DATA ROW ('D')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'C'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received COMMAND COMPLETE ('C')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'Z'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received READY FOR QUERY ('Z')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  system catalog walker, checking relation "pg_type"

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: extended:0 query:"SELECT count(*) FROM pg_catalog.pg_class AS c WHERE c.relname = 'pg_namespace'"

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'T'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received ROW DESCRIPTION ('T')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: row description: num_fileds: 1

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'D'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received DATA ROW ('D')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'C'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received COMMAND COMPLETE ('C')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'Z'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received READY FOR QUERY ('Z')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: extended:0 query:"SELECT count(*) from (SELECT has_function_privilege('prestogres', 'to_regclass(cstring)', 'execute') WHERE EXISTS(SELECT * FROM pg_catalog.pg_proc AS p WHERE p.proname = 'to_regclass')) AS s"

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'T'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received ROW DESCRIPTION ('T')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: row description: num_fileds: 1

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'D'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received DATA ROW ('D')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'C'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received COMMAND COMPLETE ('C')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'Z'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received READY FOR QUERY ('Z')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: extended:0 query:"SELECT count(*) from (SELECT has_function_privilege('prestogres', 'pgpool_regclass(cstring)', 'execute') WHERE EXISTS(SELECT * FROM pg_catalog.pg_proc AS p WHERE p.proname = 'pgpool_regclass')) AS s"

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'T'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received ROW DESCRIPTION ('T')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: row description: num_fileds: 1

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'D'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received DATA ROW ('D')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'C'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received COMMAND COMPLETE ('C')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'Z'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received READY FOR QUERY ('Z')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: extended:0 query:"SELECT count(*) FROM pg_class AS c, pg_namespace AS n WHERE c.relname = 'pg_type' AND c.relnamespace = n.oid AND n.nspname = 'pg_catalog'"

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'T'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received ROW DESCRIPTION ('T')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: row description: num_fileds: 1

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'D'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received DATA ROW ('D')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'C'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received COMMAND COMPLETE ('C')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: kind: 'Z'

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  do_query: received READY FOR QUERY ('Z')

                          2015-09-22 12:34:58: pid 14488: CONTEXT:  while searching system catalog, When relcache is missed

                          2015-09-22 12:34:58: pid 14488: DEBUG:  prestogres_send_to_where: system catalog

                          2015-09-22 12:34:58: pid 14488: DEBUG:  waiting for query response

                          2015-09-22 12:34:58: pid 14488: DETAIL:  waiting for backend:0 to complete the query

                          2015-09-22 12:34:58: pid 14488: DEBUG:  detect error: kind: T

                          2015-09-22 12:34:58: pid 14488: DEBUG:  detect error: kind: T

                          2015-09-22 12:34:58: pid 14488: DEBUG:  detect error: kind: T

                          2015-09-22 12:34:58: pid 14488: DEBUG:  detect error: kind: T

                          2015-09-22 12:34:58: pid 14488: DEBUG:  reading backend data packet kind

                          2015-09-22 12:34:58: pid 14488: DETAIL:  backend:0 of 1 kind = 'T'

                          2015-09-22 12:34:58: pid 14488: DEBUG:  processing backend response

                          2015-09-22 12:34:58: pid 14488: DETAIL:  received kind 'T'(54) from backend

                          2015-09-22 12:34:58: pid 14488: DEBUG:  reading backend data packet kind

                          2015-09-22 12:34:58: pid 14488: DETAIL:  backend:0 of 1 kind = 'C'

                          2015-09-22 12:34:58: pid 14488: DEBUG:  processing backend response

                          2015-09-22 12:34:58: pid 14488: DETAIL:  received kind 'C'(43) from backend

                          2015-09-22 12:34:58: pid 14488: DEBUG:  session context: setting command success. DONE

                          2015-09-22 12:34:58: pid 14488: DEBUG:  reading backend data packet kind

                          2015-09-22 12:34:58: pid 14488: DETAIL:  backend:0 of 1 kind = 'Z'

                          2015-09-22 12:34:58: pid 14488: DEBUG:  processing backend response

                          2015-09-22 12:34:58: pid 14488: DETAIL:  received kind 'Z'(5a) from backend

                          2015-09-22 12:34:58: pid 14488: DEBUG:  processing backend response

                          2015-09-22 12:34:58: pid 14488: DETAIL:  Ready For Query received

                          2015-09-22 12:34:58: pid 14488: DEBUG:  reading message length

                          2015-09-22 12:34:58: pid 14488: DETAIL:  slot: 0 length: 5

                          2015-09-22 12:34:58: pid 14488: DEBUG:  processing ReadyForQuery

                          2015-09-22 12:34:58: pid 14488: DETAIL:  transaction state 'I'(49)

                          2015-09-22 12:34:59: pid 14488: DEBUG:  processing frontend response

                          2015-09-22 12:34:59: pid 14488: DETAIL:  received kind 'Q'(51) from frontend

                          2015-09-22 12:34:59: pid 14488: DEBUG:  session context: clearing doing extended query messaging. DONE

                          2015-09-22 12:34:59: pid 14488: LOG:  statement: SET TIMEZONE TO 'UTC'

                          2015-09-22 12:34:59: pid 14488: DEBUG:  session context: setting query in progress. DONE

                          2015-09-22 12:34:59: pid 14488: DEBUG:  prestogres_send_to_where: others

                          2015-09-22 12:34:59: pid 14488: DEBUG:  waiting for query response

                          2015-09-22 12:34:59: pid 14488: DETAIL:  waiting for backend:0 to complete the query

                          2015-09-22 12:34:59: pid 14488: DEBUG:  detect error: kind: S

                          2015-09-22 12:34:59: pid 14488: DEBUG:  detect error: kind: S

                          2015-09-22 12:34:59: pid 14488: DEBUG:  detect error: kind: S

                          2015-09-22 12:34:59: pid 14488: DEBUG:  detect error: kind: S

                          2015-09-22 12:34:59: pid 14488: DEBUG:  reading backend data packet kind

                          2015-09-22 12:34:59: pid 14488: DETAIL:  parameter name: TimeZone value: "UTC"

                          2015-09-22 12:34:59: pid 14488: DEBUG:  reading backend data packet kind

                          2015-09-22 12:34:59: pid 14488: DETAIL:  backend:0 of 1 kind = 'C'

                          2015-09-22 12:34:59: pid 14488: DEBUG:  processing backend response

                          2015-09-22 12:34:59: pid 14488: DETAIL:  received kind 'C'(43) from backend

                          2015-09-22 12:34:59: pid 14488: DEBUG:  session context: setting command success. DONE

                          2015-09-22 12:34:59: pid 14488: DEBUG:  reading backend data packet kind

                          2015-09-22 12:34:59: pid 14488: DETAIL:  backend:0 of 1 kind = 'Z'

                          2015-09-22 12:34:59: pid 14488: DEBUG:  processing backend response

                          2015-09-22 12:34:59: pid 14488: DETAIL:  received kind 'Z'(5a) from backend

                          2015-09-22 12:34:59: pid 14488: DEBUG:  processing backend response

                          2015-09-22 12:34:59: pid 14488: DETAIL:  Ready For Query received

                          2015-09-22 12:34:59: pid 14488: DEBUG:  reading message length

                          2015-09-22 12:34:59: pid 14488: DETAIL:  slot: 0 length: 5

                          2015-09-22 12:34:59: pid 14488: DEBUG:  processing ReadyForQuery

                          2015-09-22 12:34:59: pid 14488: DETAIL:  transaction state 'I'(49)

                          2015-09-22 12:34:59: pid 14488: DEBUG:  processing frontend response

                          2015-09-22 12:34:59: pid 14488: DETAIL:  received kind 'P'(50) from frontend

                          2015-09-22 12:34:59: pid 14488: DEBUG:  session context: clearing doing extended query messaging. DONE

                          2015-09-22 12:34:59: pid 14488: DEBUG:  session context: setting doing extended query messaging. DONE

                          2015-09-22 12:34:59: pid 14488: DEBUG:  session context: setting query in progress. DONE

                          2015-09-22 12:34:59: pid 14488: ERROR:  Parse: Prestogres doesn't support extended query

                          2015-09-22 12:34:59: pid 14488: LOG:  child exiting, 1 connections reached

                          • 11. Re: What error code for tableau is valid to get back when the underlying ODBC driver can't run or prepare a specific query in the SQL compliance determination process?
                            Tom Newton

                            Perhaps running this ODBC Driver through the Simba Certified For Tableau Program might help identify the issues?

                            Please feel free to contact Simba Technoligies for assistance.s,

                             

                            Regards,
                            Tom Newton