Bạn có thể cài đặt tiện ích mở rộng không? Nếu vậy, bạn có thể sử dụng tiện ích mở rộng PL/Python
CREATE FUNCTION callMyApp[]
RETURNS VOID
AS $$
import subprocess
subprocess.call[['/usr/bin/python', '/path/to/MyApp']]
$$ LANGUAGE plpythonu;
CREATE TRIGGER executePython
AFTER INSERT ON messages
FOR EACH ROW EXECUTE PROCEDURE callMyApp[];
Lưu ý rằng điều này sẽ chạy như người dùng Postgres, do đó có thể có vấn đề về quyền.
Ngoài ra còn có một tiện ích mở rộng gọi là PL/SH
, có thể được sử dụng, nhưng dường như không phải là một gói chính thức.
CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
Bài đăng trên blog này có thể được quan tâm cho bạn.
Ngoài ra, đây gần như là một bản sao của chuỗi này có tên Run a Shell Script khi bản ghi cơ sở dữ liệu được ghi vào Postgres.
[Lưu ý: Tôi chưa kiểm tra bất kỳ mã nào trong số này.]
Tài liệu này dành cho một phiên bản không được hỗ trợ của PostgreSQL. Bạn có thể muốn xem cùng một trang cho phiên bản hiện tại hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.
You may want to view the same page for the current version, or one of the other supported versions listed above instead.
Ngôn ngữ thủ tục PL/Python cho phép các hàm PostgreSQL được viết bằng ngôn ngữ Python.PL/Python procedural language allows PostgreSQL functions to be written in the Python language.
Để cài đặt PL/Python trong một cơ sở dữ liệu cụ thể, hãy sử dụng Tạo phần mở rộng plpythonu hoặc từ dòng lệnh shell sử dụng DbName createlang plpythonu [nhưng xem thêm Phần 42.1].
Mẹo: Nếu một ngôn ngữ được cài đặt vào Template1, tất cả các cơ sở dữ liệu được tạo sau đó sẽ tự động cài đặt ngôn ngữ. If a language is installed into template1, all subsequently created databases will have the language installed automatically.
Kể từ Postgresql 7.4, PL/Python chỉ có sẵn dưới dạng ngôn ngữ "không đáng tin cậy", có nghĩa là nó không cung cấp bất kỳ cách nào để hạn chế những gì người dùng có thể làm trong đó. Do đó, nó đã được đổi tên thành plpythonu. PLPython biến thể đáng tin cậy có thể trở lại trong tương lai, nếu một cơ chế thực hiện an toàn mới được phát triển trong Python. Người viết của một chức năng trong PL/Python không đáng tin cậy phải cẩn thận rằng chức năng không thể được sử dụng để làm bất cứ điều gì không mong muốn, vì nó sẽ có thể làm bất cứ điều gì có thể được thực hiện bởi người dùng đăng nhập làm quản trị viên cơ sở dữ liệu. Chỉ các siêu nhân mới có thể tạo các hàm trong các ngôn ngữ không đáng tin cậy như plpythonu.PostgreSQL 7.4, PL/Python is only available as an "untrusted" language, meaning it does not offer any way of restricting what users can do in it. It has therefore been renamed to plpythonu. The trusted variant plpython might become available again in future, if a new secure execution mechanism is developed in Python. The writer of a function in untrusted PL/Python must take care that the function cannot be used to do anything unwanted, since it will be able to do anything that could be done by a user logged in as the database administrator. Only superusers can create functions in untrusted languages such as plpythonu.
Lưu ý: Người dùng của các gói nguồn phải đặc biệt cho phép xây dựng PL/Python trong quá trình cài đặt. [Tham khảo hướng dẫn cài đặt để biết thêm thông tin.] Người dùng của các gói nhị phân có thể tìm thấy PL/Python trong một gói con riêng biệt. Users of source packages must specially enable the build of PL/Python during the installation process. [Refer to the installation instructions for more information.] Users of binary packages might find PL/Python in a separate subpackage.
Tôi có một tập lệnh Python chứa trong đó một lệnh SQL. Khi tôi thực hiện điều này thông qua bảng điều khiển QGIS Python, nó cũng chạy trơn tru và trả về các kết quả dự kiến mà không gặp vấn đề gì.
Tôi muốn biết liệu có thể chạy kịch bản Python trong pgadmin không? Có khả năng thêm như một bảng điều khiển Python vào pgadmin hoặc một cái gì đó khác để đạt được điều này?
Lý do tôi hỏi chỉ đơn giản là vì nếu có thể tôi muốn chạy mọi thứ thông qua một chương trình trong trường hợp này là pgadmin vì phần lớn các bước của tôi nằm trong SQL và đó chỉ là một bước mà tôi đang sử dụng Python.
Sẽ rất hữu ích khi biết liệu có thể và làm thế nào để thực hiện hoặc nếu nó sẽ nỗ lực nhiều hơn giá trị của nó vì các quy trình như bây giờ tất cả đều hoạt động.
Vince
19.2K12 Huy hiệu vàng41 Huy hiệu bạc62 Huy hiệu đồng12 gold badges41 silver badges62 bronze badges
Hỏi ngày 18 tháng 4 năm 2018 lúc 15:31Apr 18, 2018 at 15:31
Tôi nghĩ rằng bạn đang cố gắng sử dụng Postgres và Python cùng nhau. Một tùy chọn có thể là:
- Bạn sử dụng pyscopg2 để thực hiện tập lệnh Postgres của bạn và trả kết quả của bạn thành Python [bạn có thể sử dụng PL/PGSQL để tạo chức năng và sau đó gọi hàm đó bằng psycopg2 trong python].
- Sau đó thực hiện xử lý thêm trong Python.
- Cuối cùng, trả lại kết quả cho cơ sở dữ liệu Postgres bằng PSYCOPG2.
Hoặc bạn có thể sử dụng pgadmin để tạo tiện ích mở rộng PL/python như sau
CREATE EXTENSION plpythonu;
Nhưng tôi chưa bao giờ làm điều đó bản thân bạn, bạn có thể tham khảo liên kết này để được giúp đỡ thêm.
//www.postgresql.org/docs/9.6/static/plpython.html. Hy vọng điều này trả lời bạn đặt câu hỏi.
Đã trả lời ngày 19 tháng 4 năm 2018 lúc 4:17Apr 19, 2018 at 4:17
Asad Abbasasad AbbasAsad Abbas
1.5447 Huy hiệu bạc25 Huy hiệu Đồng7 silver badges25 bronze badges