2009-03-06 13 views
6

के लिए पी एल/रूबी स्थापित कर रहा है यह एम्बेडेड माणिक कोड, साथ कार्यों postgres के विकास में सक्षम बनाना है, लेकिन मैं इसे बनाने में असमर्थ रहे हैं।PostgreSQL 8.3

http://www.robbyonrails.com/articles/2005/08/22/installing-untrusted-pl-ruby-for-postgresql

मैं नवीनतम संस्करण (plruby-0.5.3.tar.gz) ftp://moulon.inra.fr/pub/ruby/

पर उपलब्ध कराई मैं हल है, वहां से plruby.so की जरूरत का निर्माण करने की कोशिश कर रहा हूँ ने सलाह दी के रूप में जहां अपने स्थानीय postgres की स्थापना की है और करने के लिए मंगलाचरण समायोजित:

ruby extconf.rb --with-pgsql-include=/usr/postgresql-8.3.4/include/server --enable-shared --disable-conversion --with-pgsql-version=83 

मुझे लगता है कि बदलाव की काफी संख्या की कोशिश की है, लेकिन यह सफलतापूर्वक बनाने में सक्षम होना प्रतीत नहीं होता है 'Conftest.c' फ़ाइल

इसे कहते हैं यह:, यह

checking for catalog/pg_proc.h... yes 
*** extconf.rb failed *** 
Could not create Makefile due to some reason, probably lack of 
necessary libraries and/or headers. Check the mkmf.log file for more 
details. You may need configuration options. 

और यहाँ क्या मैं अपने mkmf.log

have_header: checking for catalog/pg_proc.h... -------------------- yes 
"gcc -E -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -I/usr/postgresql-8.3.4/include/server -g -O2 -fPIC conftest.c -o conftest.i" 
checked program was: 
/* begin */ 
1: #include <catalog/pg_proc.h> 
/* end */ 

में अंत जब मैं जीसीसी लाइन मैन्युअल रूप से चलाना है कहते हैं कि कोई 'conftest.c' नहीं है (और वहां नहीं है, लेकिन इसे उत्पन्न किया जाना चाहिए)।

'uname -a' ... gives 
Linux vdev1 2.6.18.8-xen #2 SMP Thu May 8 11:52:29 PDT 2008 x86_64 x86_64 x86_64 GNU/Linux 
'ruby -v' ... gives 
ruby 1.8.6 (2008-08-11 patchlevel 287) [x86_64-linux] 

कोई भी मदद और/या सलाह की सराहना की जाएगी।

- माइक Berrow

उत्तर

5

ठीक है, मैं हाथ में कामयाब रहे की एक लॉगफ़ाइल एक सफल बनाने के लिए googling, जीसीसी लाइनों के साथ शुरू करने से इस (नाजुक extconf.rb और makefile को छोड़कर) का निर्माण मैंने वहां देखा, फिर जीसीसी संकलन झंडे और पथ के साथ झुकाव जब तक यह काम नहीं किया। plruby.h

में नीचे के रूप में

#ifndef SAFE_LEVEL 
//#define SAFE_LEVEL 12 
#define SAFE_LEVEL 0 
#endif 

दिखाया खोल तो लिंक

gcc -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -DHAVE_CATALOG_PG_PROC_H -DHAVE_RB_HASH_DELETE -DHAVE_ST_H -DHAVE_UTILS_ARRAY_H -I/usr/postgresql-8.3.4/include/server -D_FILE_OFFSET_BITS=64 -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -DHAVE_RB_HASH_DELETE -DHAVE_RB_INITIALIZE_COPY -DPG_UTILS_ARRAY -DPG_PL_TRYCATCH -DPG_PL_VERSION=83 -DPLRUBY_CALL_HANDLER=plruby_call_handler -DPLRUBY_VALIDATOR=plruby_validator -c plruby.c 
gcc -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -DHAVE_CATALOG_PG_PROC_H -DHAVE_RB_HASH_DELETE -DHAVE_ST_H -DHAVE_UTILS_ARRAY_H -I/usr/postgresql-8.3.4/include/server -D_FILE_OFFSET_BITS=64 -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -DHAVE_RB_HASH_DELETE -DHAVE_RB_INITIALIZE_COPY -DPG_UTILS_ARRAY -DPG_PL_TRYCATCH -DPG_PL_VERSION=83 -DPLRUBY_CALL_HANDLER=plruby_call_handler -DPLRUBY_VALIDATOR=plruby_validator -c plplan.c 
gcc -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -DHAVE_CATALOG_PG_PROC_H -DHAVE_RB_HASH_DELETE -DHAVE_ST_H -DHAVE_UTILS_ARRAY_H -I/usr/postgresql-8.3.4/include/server -D_FILE_OFFSET_BITS=64 -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -DHAVE_RB_HASH_DELETE -DHAVE_RB_INITIALIZE_COPY -DPG_UTILS_ARRAY -DPG_PL_TRYCATCH -DPG_PL_VERSION=83 -DPLRUBY_CALL_HANDLER=plruby_call_handler -DPLRUBY_VALIDATOR=plruby_validator -c plpl.c 
gcc -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -DHAVE_CATALOG_PG_PROC_H -DHAVE_RB_HASH_DELETE -DHAVE_ST_H -DHAVE_UTILS_ARRAY_H -I/usr/postgresql-8.3.4/include/server -D_FILE_OFFSET_BITS=64 -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -DHAVE_RB_HASH_DELETE -DHAVE_RB_INITIALIZE_COPY -DPG_UTILS_ARRAY -DPG_PL_TRYCATCH -DPG_PL_VERSION=83 -DPLRUBY_CALL_HANDLER=plruby_call_handler -DPLRUBY_VALIDATOR=plruby_validator -c pltrans.c 
gcc -shared -o plruby.so plruby.o plplan.o plpl.o pltrans.o -L. -L/usr/lib -L/usr/postgresql-8.3.4/lib -L. -Wl,-Bsymbolic -rdynamic -Wl,-export-dynamic -lruby -lpthread -ldl -lcrypt -lm -lc 

प्लेस '.so' गतिशील पुस्तकालय में ऊपर बनाया फ़ाइल से प्रत्येक संकलित 0 को SAFE_LEVEL बदल पथ ($ libdir) [pg_config --pkglibdir का उपयोग करके निर्धारित (मेरे मामले में) /usr/postgresql-8.3.4/lib]

अन्य लोग इस दृष्टिकोण को सबसे ज्यादा अपने स्वयं के tweaking करना होगा।

इन कार्यों को जोड़ें ...

CREATE FUNCTION ruby_max(int4, int4) RETURNS text AS ' 
    if args[0].to_i > args[1].to_i 
     return "The one on the left is bigger" 
    else 
     return "The one on the right is bigger" 
    end 
' LANGUAGE 'plruby'; 

select ruby_max(8, 9); 

इस के लिए अन्य निर्माण विकल्प है कि प्रकार 'रूपांतरण' सक्षम होते हैं:

CREATE OR REPLACE FUNCTION plruby_call_handler() 
    RETURNS language_handler AS 
'$libdir/plruby', 'plruby_call_handler' 
    LANGUAGE 'c' VOLATILE 
    COST 1; 
ALTER FUNCTION plruby_call_handler() OWNER TO postgres; 

CREATE OR REPLACE FUNCTION plruby_validator(oid) 
    RETURNS void AS 
'$libdir/plruby', 'plruby_validator' 
    LANGUAGE 'c' VOLATILE 
    COST 1; 
ALTER FUNCTION plruby_validator(oid) OWNER TO postgres; 

एक प्रक्रियात्मक भाषा

CREATE PROCEDURAL LANGUAGE 'plruby' HANDLER plruby_call_handler; 

यह टेस्ट के रूप में जोड़े 'plruby'। उपर्युक्त निर्माण सबसे सरल है और सभी फ़ंक्शन पैरामीटर वास्तव में रूबी के रूप में रूबी में आते हैं (भले ही उन्हें int4 के रूप में घोषित किया गया हो)। इस प्रकार 'to_i' कॉल की आवश्यकता यहां दी गई है।