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.
.DLLat build time, that's the root cause of the error. You want the corresponding
.LIBinstead. See for example stackoverflow.com/questions/24222423 but knowing that plpgsql.lib does not ship with entreprisedb pre-compiled binaries.