EDUCAÇÃO E TECNOLOGIA

How to configure Postgresql ODBC connection for BI 4.2 On Windows/Linux Server


Symptom

How to configure PostgreSQL ODBC connection for BI 4 on Windows/Linux Red Hat Platform.

Environment

  • SAP Business Objects Business Intelligence platform 4.2
  • Information Design Tool (IDT)
  • Universe Design Tool (UDT)
  • Web Intelligence (Webi)
  • Linux/Windows

Configuration steps

The ODBC Driver needs to be installed on both SAP BI Platform client and server machines.
The steps below need to be performed twice, once on the client machine and once on the server machine.

Download and install the Postgresql client drivers on the Windows desktop machine from (https://www.progress.com/odbc/postgresql).

Go to the Installed Directory folder and ensure the below mentioned setup files is created

  • named Postgresql_odbc.setup on the server machine
  • named Postgresql_odbc.32.setup on the client machine

Put the following contents into the file using your favorite text editor (contents is identical for both files) :

<?xml version="1.0" encoding="UTF-8"?><Product Name="GreenPlum Access Pack (ODBC)" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../config/core/setup.xsd">
<Version Type="Component">3.3.0.0</Version>
<Version Type="Build">14.2.5.2618</Version>
<Driver>
<NetworkLayer Name="ODBC"></NetworkLayer>
<Directory>odbc</Directory>
<DataFileName>postgresql9</DataFileName>
</Driver>
</Product>

Go back to the dataAccess\connectionServer folder, and into the odbc subfolder. Create a Posgresql.sbo file, with the following contents:

<?xml version="1.0" encoding="UTF-8"?><DriverConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../sbo.xsd">
<Defaults>
<Parameter Name="Family">Generic</Parameter>
<Parameter Name="SQL External File">postgresql</Parameter>
<Parameter Name="SQL Parameter File">postgresql</Parameter>
<Parameter Name="Driver Capabilities">Query</Parameter>
<Parameter Name="Description File">odbc</Parameter>
<Parameter Name="Extensions">odbc</Parameter>
<Parameter Name="CharSet Table">postgresql</Parameter>
<Parameter Name="Array Fetch Available">True</Parameter>
<Parameter Name="Array Bind Available">False</Parameter>
<Parameter Name="Empty String">EmptyString</Parameter>
<Parameter Name="Query TimeOut Available">True</Parameter>
<Parameter Name="Connection Status Available">False</Parameter>
<Parameter Name="Driver Name">PostgreSQL.*</Parameter>
</Defaults>
<DataBases> <DataBase Active="Yes" Name="PostgreSQL 9" Platform="MSWindows,Linux">
<Aliases>
<!-- You can add an alias here if you are using some connections that are defined with an older database engine -->
<Alias>PostgreSQL 8</Alias>
</Aliases>
<Libraries>
<Library Platform="MSWindows">dbd_wodbc3</Library>
<Library Platform="MSWindows">dbd_odbc3</Library>
<Library Platform="Unix">dbd_uxodbc3</Library>
</Libraries>
<Parameter Name="Family">PostgreSQL</Parameter>
<Parameter Name="Extensions">postgresql9,postgresql,odbc</Parameter>
</DataBase>
</DataBases>
</DriverConfiguration>

In UDT or IDT create a universe connection and publish to the repository

Go to the Installed Directory folder and ensure the PostgreSQL.prm is created  (or) else create a PostgreSQL.prm file with the following contents:

<?xml version="1.0" encoding="UTF-8"?><DBParameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../dbparameters.xsd"> <Configuration> <Parameter Name="DB_TYPE">PostgreSQL</Parameter> <Parameter Name="ORDER_BY_REQUIRES_SELECT">YES</Parameter> <Parameter Name="GROUP_BY_SUPPORTS_COLUMN_INDEX">NO</Parameter> <Parameter Name="GROUP_BY_SUPPORTS_CONSTANT">YES</Parameter> <Parameter Name="JOIN">YES</Parameter> <Parameter Name="INNER_JOIN">INNER JOIN</Parameter> <Parameter Name="EXT_JOIN">YES</Parameter> <Parameter Name="UNION">UNION</Parameter> <Parameter Name="UNION_ALL">YES</Parameter> <Parameter Name="UNION_IN_SUBQUERY">NO</Parameter> <Parameter Name="INTERSECT">INTERSECT</Parameter> <Parameter Name="INTERSECT_ALL">YES</Parameter> <Parameter Name="INTERSECT_IN_SUBQUERY">YES</Parameter> <Parameter Name="MINUS">EXCEPT</Parameter> <Parameter Name="MINUS_ALL">YES</Parameter> <Parameter Name="MINUS_IN_SUBQUERY">YES</Parameter> <Parameter Name="SELECT_SUPPORTS_NULL">YES</Parameter> <Parameter Name="RANK_SUPPORTED">NO</Parameter> <Parameter Name="PERCENT_RANK_SUPPORTED">NO</Parameter> <Parameter Name="CONSTANT_SAMPLING_SUPPORTED">NO</Parameter> <Parameter Name="SEED_SAMPLING_SUPPORTED">NO</Parameter> <Parameter Name="ANALYTIC_CLAUSE"></Parameter> <Parameter Name="ANALYTIC_FUNCTIONS"></Parameter> <Parameter Name="FULL_EXT_JOIN">YES</Parameter> <Parameter Name="LEFT_EXT_JOIN">YES</Parameter> <Parameter Name="LEFT_OUTER"></Parameter> <Parameter Name="RIGHT_EXT_JOIN">YES</Parameter> <Parameter Name="RIGHT_OUTER"></Parameter> <Parameter Name="GROUP_BY_SUPPORTS_COMPLEX">YES</Parameter> <Parameter Name="GROUP_BY">YES</Parameter> <Parameter Name="HAVING">YES</Parameter> <Parameter Name="ORDER_BY">YES</Parameter> <Parameter Name="ORDER_BY_SUPPORTS_COLUMN_INDEX">YES</Parameter> <Parameter Name="DISTINCT">NO</Parameter> <Parameter Name="LIKE_SUPPORTS_ESCAPE_CLAUSE">YES</Parameter> <Parameter Name="SUBQUERY_IN_FROM">NO</Parameter> <Parameter Name="SUBQUERY_IN_IN">YES</Parameter> <Parameter Name="SUBQUERY_IN_WHERE">YES</Parameter> <Parameter Name="CALCULATION_FUNCTION">YES</Parameter> <Parameter Name="OUTERJOINS_GENERATION">ANSI92</Parameter> </Configuration> <Operators> <Operator Arity="1" ID="ADD" Type="Numeric">+</Operator> <Operator Arity="1" ID="SUBSTRACT" Type="Numeric">-</Operator> <Operator Arity="1" ID="MULTIPLY" Type="Numeric">*</Operator> <Operator Arity="1" ID="DIVIDE" Type="Numeric">/</Operator> <Operator Arity="1" ID="MODULO" Type="Numeric">%</Operator> <Operator Arity="1" ID="POWER" Type="Numeric">^</Operator> <Operator Arity="1" ID="CONCAT" Type="Char">||</Operator> <Operator Arity="0" ID="NOT" Type="Logical">NOT</Operator> <Operator Arity="1" ID="OR" Type="Logical">OR</Operator> <Operator Arity="1" ID="AND" Type="Logical">AND</Operator> <Operator Arity="0" ID="NOT_NULL" Type="Logical">IS NOT NULL</Operator> <Operator Arity="0" ID="NULL" Type="Logical">IS NULL</Operator> <Operator Arity="1" ID="SUP" Type="Logical">&gt;=</Operator> <Operator Arity="1" ID="INF" Type="Logical">&lt;=</Operator> <Operator Arity="1" ID="EQUAL" Type="Logical">=</Operator> <Operator Arity="1" ID="DIFF" Type="Logical">&lt;&gt;</Operator> <Operator Arity="1" ID="STRICT_SUP" Type="Logical">&gt;</Operator> <Operator Arity="1" ID="STRICT_INF" Type="Logical">&lt;</Operator> <Operator Arity="1" ID="IN_LIST" Type="Logical">IN</Operator> <Operator Arity="1" ID="NOT_IN_LIST" Type="Logical">NOT IN</Operator> <Operator Arity="1" ID="MATCH" Type="Logical">LIKE</Operator> <Operator Arity="1" ID="NOT_MATCH" Type="Logical">NOT LIKE</Operator> <Operator Arity="2" ID="BETWEEN" Type="Logical">BETWEEN AND</Operator> <Operator Arity="2" ID="NOT_BETWEEN" Type="Logical">NOT BETWEEN AND</Operator> </Operators> <Functions> <!-- Aggregate Functions --> <Function Distinct="True" Group="True" ID="Average" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>avg($1)</SQL> </Function> <Function Distinct="True" Group="True" ID="Count" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="All"></Argument> </Arguments> <SQL>count($1)</SQL> </Function> <Function Distinct="True" Group="True" ID="Maximum" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="All"></Argument> </Arguments> <SQL>max($1)</SQL> </Function> <Function Distinct="True" Group="True" ID="Minimum" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="All"></Argument> </Arguments> <SQL>min($1)</SQL> </Function> <Function Distinct="True" Group="True" ID="Sum" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>sum($1)</SQL> </Function> <Function Group="True" ID="StandardDeviation" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>stddev($1)</SQL> </Function> <Function Group="True" ID="PopulationStandardDeviation" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>stddev_pop($1)</SQL> </Function> <Function Group="True" ID="SampleStandardDeviation" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>stddev_samp($1)</SQL> </Function> <Function Group="False" ID="Variance" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>variance($1)</SQL> </Function> <Function Group="False" ID="PopulationVariance" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>var_pop($1)</SQL> </Function> <Function Group="False" ID="SampleVariance" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>var_samp($1)</SQL> </Function> <!-- Character String Functions --> <Function Group="False" ID="ASCII_code" InMacro="False" Type="String"> <Arguments> <Argument Type="Char"></Argument> </Arguments> <SQL>ascii($1)</SQL> </Function> <Function Group="False" ID="Character" InMacro="False" Type="String"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>chr($1)</SQL> </Function> <Function Group="False" ID="BitLength" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>bit_length($1)</SQL> </Function> <Function Group="False" ID="CharLength" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>char_length($1)</SQL> </Function> <Function Group="False" ID="OctetLength" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>octet_length($1)</SQL> </Function> <Function Group="False" ID="Length" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>length($1)</SQL> </Function> <Function Group="False" ID="Uppercase" InMacro="True" Type="String"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>upper($1)</SQL> </Function> <Function Group="False" ID="Lowercase" InMacro="True" Type="String"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>lower($1)</SQL> </Function> <Function Group="False" ID="Locate" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="String"></Argument> <Argument Type="String"></Argument> </Arguments> <SQL>strpos($1,$2)</SQL> </Function> <Function Group="False" ID="SubString" InMacro="True" Type="String"> <Arguments> <Argument Type="String"></Argument> <Argument Type="Numeric"></Argument> <Argument Type="Numeric"></Argument> </Arguments> <SQL>substring($1,$2,$3)</SQL> </Function> <Function Group="False" ID="LeftRemove" InMacro="True" Type="String"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>ltrim ($1)</SQL> </Function> <Function Group="False" ID="RightRemove" InMacro="True" Type="String"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>rtrim ($1)</SQL> </Function> <Function Group="False" ID="Remove" InMacro="True" Type="String"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>trim (both $1)</SQL> </Function> <Function Group="False" ID="Replace" InMacro="True" Type="String"> <Arguments> <Argument Type="String"></Argument> <Argument Type="String"></Argument> <Argument Type="String"></Argument> </Arguments> <SQL>replace ($1,$2,$3)</SQL> </Function> <Function Group="False" ID="Repeat" InMacro="True" Type="String"> <Arguments> <Argument Type="String"></Argument> <Argument Type="Numeric"></Argument> </Arguments> <SQL>repeat($1,$2)</SQL> </Function> <!-- Prompts --> <Function Group="False" ID="Character_prompt" InMacro="True" Type="String"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>@prompt($1,'A',,,)</SQL> </Function> <Function Group="False" ID="Numeric_prompt" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>@prompt($1,'N',,,)</SQL> </Function> <Function Group="False" ID="Date_prompt" InMacro="True" Type="DateTime"> <Arguments> <Argument Type="String"></Argument> </Arguments> <SQL>@prompt($1,'D',,,)</SQL> </Function> <!-- Datetime Functions --> <Function Group="False" ID="Day_of_week" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="DateTime"></Argument> </Arguments> <SQL>EXTRACT (DOW FROM TIMESTAMP $1)</SQL> </Function> <Function Group="False" ID="Day_of_year" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="DateTime"></Argument> </Arguments> <SQL>EXTRACT (DOY FROM TIMESTAMP $1)</SQL> </Function> <Function Group="False" ID="Number_of_the_month" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="DateTime"></Argument> </Arguments> <SQL>EXTRACT (MONTH FROM TIMESTAMP $1)</SQL> </Function> <Function Group="False" ID="Number_of_the_week" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="DateTime"></Argument> </Arguments> <SQL>EXTRACT (WEEK FROM TIMESTAMP $1)</SQL> </Function> <Function Group="False" ID="Year" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="DateTime"></Argument> </Arguments> <SQL>EXTRACT (YEAR FROM TIMESTAMP $1)</SQL> </Function> <Function Group="False" ID="Quarter" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="DateTime"></Argument> </Arguments> <SQL>EXTRACT (QUARTER FROM TIMESTAMP $1)</SQL> </Function> <Function Group="False" ID="Day" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="DateTime"></Argument> </Arguments> <SQL>EXTRACT (DAY FROM TIMESTAMP $1)</SQL> </Function> <Function Group="False" ID="Hour" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="DateTime"></Argument> </Arguments> <SQL>EXTRACT (HOUR FROM TIMESTAMP $1)</SQL> </Function> <Function Group="False" ID="Minute" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="DateTime"></Argument> </Arguments> <SQL>EXTRACT (MINUTE FROM TIMESTAMP $1)</SQL> </Function> <Function Group="False" ID="Second" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="DateTime"></Argument> </Arguments> <SQL>EXTRACT (SECOND FROM TIMESTAMP $1)</SQL> </Function> <Function Group="False" ID="date_part" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="All"></Argument> <Argument Type="All"></Argument> </Arguments> <SQL>date_part ($1 $2)</SQL> </Function> <Function Group="False" ID="Current_date" InMacro="True" Type="DateTime"> <SQL>current_date</SQL> </Function> <Function Group="False" ID="Current_time" InMacro="True" Type="DateTime"> <SQL>current_time</SQL> </Function> <Function Group="False" ID="Current_timestamp" InMacro="True" Type="DateTime"> <SQL>current_timestamp</SQL> </Function> <Function Group="False" ID="Local_time" InMacro="True" Type="DateTime"> <SQL>localtime</SQL> </Function> <Function Group="False" ID="Local_timestamp" InMacro="True" Type="DateTime"> <SQL>localtimestamp</SQL> </Function> <!-- Mathematical Functions --> <Function Group="False" ID="Absolute" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>abs($1)</SQL> </Function> <Function Group="False" ID="Cuberoot" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>cbrt($1)</SQL> </Function> <Function Group="False" ID="Arc_cosine" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>acos($1)</SQL> </Function> <Function Group="False" ID="Arc_sine" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>asin($1)</SQL> </Function> <Function Group="False" ID="Arc_tangent" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>atan($1)</SQL> </Function> <Function Group="False" ID="Angle_Tangent_2" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> <Argument Type="Numeric"></Argument> </Arguments> <SQL>atan2($1,$2)</SQL> </Function> <Function Group="False" ID="Ceil" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>ceiling($1)</SQL> </Function> <Function Group="False" ID="Cosine" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>cos($1)</SQL> </Function> <Function Group="False" ID="Degrees" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>degrees($1)</SQL> </Function> <Function Group="False" ID="Exp" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>exp($1)</SQL> </Function> <Function Group="False" ID="Floor" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>floor($1)</SQL> </Function> <Function Group="False" ID="Log" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>ln($1)</SQL> </Function> <Function Group="False" ID="Log10" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>log($1)</SQL> </Function> <Function Group="False" ID="Mod" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> <Argument Type="Numeric"></Argument> </Arguments> <SQL>mod($1,$2)</SQL> </Function> <Function Group="False" ID="Pi" InMacro="False" Type="Numeric"> <SQL>pi()</SQL> </Function> <Function Group="False" ID="Random" InMacro="False" Type="Numeric"> <SQL>random()</SQL> </Function> <Function Group="False" ID="Power" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> <Argument Type="Numeric"></Argument> </Arguments> <SQL>power($1,$2)</SQL> </Function> <Function Group="False" ID="Radians" InMacro="False" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>radians($1)</SQL> </Function> <Function Group="False" ID="Round" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> <Argument Type="Numeric"></Argument> </Arguments> <SQL>round($1,$2)</SQL> </Function> <Function Group="False" ID="Sign" InMacro="False" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>sign($1)</SQL> </Function> <Function Group="False" ID="Sine" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>sin($1)</SQL> </Function> <Function Group="False" ID="Sqrt" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>sqrt($1)</SQL> </Function> <Function Group="False" ID="Tangent" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>tan($1)</SQL> </Function> <Function Group="False" ID="CoTangent" InMacro="True" Type="Numeric"> <Arguments> <Argument Type="Numeric"></Argument> </Arguments> <SQL>cot($1)</SQL> </Function> <!-- Other Functions --> <Function Group="False" ID="Case" InMacro="True" Type="String"> <Arguments> <Argument Type="String"></Argument> <Argument Type="String"></Argument> <Argument Type="String"></Argument> <Argument Type="String"></Argument> </Arguments> <SQL>CASE $1 WHEN $2 THEN $3 ELSE $4 END</SQL> </Function> <Function Group="False" ID="IF_NULL" InMacro="False" Type="All"> <Arguments> <Argument Type="All"></Argument> <Argument Type="All"></Argument> </Arguments> <SQL>COALESCE($1,$2)</SQL> </Function> </Functions> </DBParameters> 

Finally, create another Postgresql.prm into the extensions\qt subfolder, with the following contents:

<?xml version="1.0" encoding="UTF-8"?><DBParameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../dbparameters.xsd">
<Configuration>
<Parameter Name="GROUPING_SETS">No</Parameter>
<Parameter Name="AUTOMATIC_CAST">No</Parameter>
<Parameter Name="ACCEPT_COLUMNS_IN_VIEW_DECLARATION">No</Parameter>
<Parameter Name="WITH_CLAUSE_SUPPORTED">Yes</Parameter>
<Parameter Name="Fct_IfThenElse">CASE WHEN( #1 ) THEN #2 ELSE #3 END</Parameter> <Parameter Name="OUTERJOINS_GENERATION">ANSI_92</Parameter>
<Parameter Name="JOIN_BY_SQL">YES</Parameter>
<Parameter Name="IDENTIFIER_DELIMITER">&quot;</Parameter>
<Parameter Name="CONCAT">||</Parameter>
<Parameter Name="OWNER">Y</Parameter>
<Parameter Name="QUALIFIER">Y</Parameter>
<Parameter Name="CASE_SENSITIVE">N</Parameter>
<Parameter Name="COMMA">||' '||</Parameter>
<Parameter Name="REFRESH_COLUMNS_TYPE">Q</Parameter>
<Parameter Name="CHECK_OWNER_STATE">N</Parameter>
<Parameter Name="CHECK_QUALIFIER_STATE">N</Parameter>
<Parameter Name="KEY_INFO_SUPPORTED">Y</Parameter>
<Parameter Name="BACK_QUOTE_SUPPORTED">N</Parameter>
<Parameter Name="USER_INPUT_DATE_FORMAT">{\d 'yyyy-mm-dd'}</Parameter>
<Parameter Name="USER_INPUT_NUMERIC_SEPARATOR">.</Parameter>
<Parameter Name="KEY_INFO_SUPPORTED">N</Parameter>
<Parameter Name="IF_NULL">COALESCE</Parameter>
</Configuration>
</DBParameters>

Restart your client tools and SAP BI Platform server, the connector should now be available

SAP Refer Note: https://userapps.support.sap.com/sap/support/knowledge/en/1639701

Conclusion: This blog helps you to configure PostgreSQL ODBC connection for BI 4.2 On Windows/Linux Server

Feedback and comments are appreciated Thanks for stopping by, and hope this helps at least a few developers/users out there