Problems while building plpgsql_check on Windows I try to build plpgsql_check extension by @PavelStehule (Erwin Brandstetter recommended it to me in this answer) on Windows XP 32bit with Visual Studio 2010 (I used this article as a manual). However, I got following errors:

error LNK2001: unresolved external symbol _exec_get_datum_type
error LNK2001: unresolved external symbol _plpgsql_compile
error LNK2001: unresolved external symbol _plpgsql_build_datatype
error LNK2001: unresolved external symbol _plpgsql_stmt_typename
error LNK2001: unresolved external symbol _plpgsql_parser_setup


In addition, there are two IntelliSense errors: expected a ')' in plpgsql.h (lines 923 and 953 - both in datum-related functions) - I expect these to be false alerts (if they are important, how to solve them?).

After some googling I found that someone had a similar problem on OS X. The problem was that plpgsql.so either wasn't linked or didn't work. I have no plpgsql.so on my computer, but I have plpgsql.dll which should correspond to it. So I linked it and the error changed:

error LNK1107: invalid or corrupt file: cannot read at 0x2A8


This dynamic library is part of the PostgreSQL distribution, so it shouldn't be corrupt. However, I'm afraid that what Pavel wrote in the linked discussion applies here:


  It needs link against plpgsql.so. I didn't test it against clang - I
  remember a talk with Tom Lane, he was surprised so this code works and
  probably on some platforms can be unavailable.
  
  ...
  
  Nobody expected so plpgsql will be used from other extensions - and
  environment is not prepared for it :(


The worst case would be that plpgsql checker extension is simply not available under Windows, because it is too low-mana area for such a mighty magic. :-) If I just need a different approach, please point me to it.
You can find Adam Bartoszewicz's instructions here on Google Groups (also published on Pavel Stehule's blog):


  
  Download and install PostgreSQL 9.3.4 for Win32 from http://www.enterprisedb.com
  Download and install Microsoft Visual C++ 2010 Express
  Lern tutorial http://blog.2ndquadrant.com/compiling-postgresql-extensions-visual-studio-windows
  The plpgsql_check depends on plpgsql and we need to add plpgsql.lib to the library list. Unfortunately PostgreSQL 9.4.3 does not contain this library.
  Create a plpgsql.lib from plpgsql.dll as described in http://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll
  Change plpgsql_check.c file, add PGDLLEXPORT line before evry extension function, as described in http://blog.2ndquadrant.com/compiling-postgresql-extensions-visual-studio-windows
  ...
  PGDLLEXPORT
  Datum plpgsql_check_function_tb(PG_FUNCTION_ARGS);
  PGDLLEXPORT
  Datum plpgsql_check_function(PG_FUNCTION_ARGS);
  ...
  PGDLLEXPORT
  Datum
  plpgsql_check_function(PG_FUNCTION_ARGS)
  {
  Oid            funcoid = PG_GETARG_OID(0);
  ...
  PGDLLEXPORT
  Datum
  plpgsql_check_function_tb(PG_FUNCTION_ARGS)
  {
  Oid            funcoid = PG_GETARG_OID(0);
  ...  
  Build plpgsql_check.dll
  Install plugin
  
  copy plpgsql_check.dll to PostgreSQL\9.3\lib
  copy plpgsql_check.control and plpgsql_check--0.8.sql to PostgreSQL\9.3\share\extension