PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL 8.3 के लिए PL/Ruby इंस्टॉल करना

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

plruby.h में SAFE_LEVEL को 0 में बदलें जैसा कि नीचे दिखाया गया है

#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' फ़ाइल को डायनेमिक लाइब्रेरी पथ ($libdir)[ में pg_config --pkglibdir का उपयोग करके निर्धारित करें दे रहा है (मेरे मामले में) /usr/postgresql-8.3.4/lib ]

इस दृष्टिकोण को अपनाने वाले अन्य लोगों को सबसे अधिक संभावना है कि उन्हें अपनी स्वयं की ट्वीकिंग करनी होगी।

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

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;

प्रक्रियात्मक भाषा के रूप में 'plruby' जोड़ें

CREATE PROCEDURAL LANGUAGE 'plruby' HANDLER plruby_call_handler;

इसका परीक्षण करें:

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);

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या विदेशी कुंजी संदर्भों में PostgreSQL में NULL मान हो सकते हैं?

  2. Postgresql को ठीक करने के लिए Homebrew में रीडलाइन संस्करण 6.x पर लौटें?

  3. पीएल/पीजीएसक्यूएल में पूर्णांक [] पर पुनरावृति

  4. पोस्टग्रेज:टेबलों को पॉप्युलेट करने से पहले या बाद में इंडेक्स बनाना चाहिए

  5. पिछले 24 घंटों में डेटा परिवर्तन वाली सभी तालिकाओं को कैसे सूचीबद्ध करें?