PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Dapatkan ukuran objek besar dalam kueri PostgreSQL?

Bukannya saya telah menggunakan objek besar, tetapi melihat dokumen:http://www.postgresql.org/docs/current/interactive/lo-interfaces.html#LO-TELL

Saya pikir Anda harus menggunakan teknik yang sama seperti yang diperlukan oleh beberapa API sistem file:cari sampai akhir, lalu beri tahu posisinya. PostgreSQL memiliki fungsi SQL yang muncul untuk membungkus fungsi C internal. Saya tidak dapat menemukan banyak dokumentasi, tetapi ini berhasil:

CREATE OR REPLACE FUNCTION get_lo_size(oid) RETURNS bigint
VOLATILE STRICT
LANGUAGE 'plpgsql'
AS $$
DECLARE
    fd integer;
    sz bigint;
BEGIN
    -- Open the LO; N.B. it needs to be in a transaction otherwise it will close immediately.
    -- Luckily a function invocation makes its own transaction if necessary.
    -- The mode x'40000'::int corresponds to the PostgreSQL LO mode INV_READ = 0x40000.
    fd := lo_open($1, x'40000'::int);
    -- Seek to the end.  2 = SEEK_END.
    PERFORM lo_lseek(fd, 0, 2);
    -- Fetch the current file position; since we're at the end, this is the size.
    sz := lo_tell(fd);
    -- Remember to close it, since the function may be called as part of a larger transaction.
    PERFORM lo_close(fd);
    -- Return the size.
    RETURN sz;
END;
$$; 

Mengujinya:

-- Make a new LO, returns an OID e.g. 1234567
SELECT lo_create(0);

-- Populate it with data somehow
...

-- Get the length.
SELECT get_lo_size(1234567);

Tampaknya fungsionalitas LO dirancang untuk digunakan sebagian besar melalui klien atau melalui pemrograman server tingkat rendah, tetapi setidaknya mereka telah menyediakan beberapa fungsi SQL yang terlihat untuknya, yang memungkinkan hal di atas. Saya melakukan kueri untuk SELECT relname FROM pg_proc where relname LIKE 'lo%' untuk memulai. Kenangan samar tentang pemrograman C dan sedikit riset untuk mode x'40000'::int dan SEEK_END = 2 nilai yang dibutuhkan untuk sisanya!



  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:menjalankan hitungan baris untuk kueri 'menurut menit'

  2. Bagaimana cara mencocokkan satu hari penuh dengan bidang datetime?

  3. Nilai NULL fungsi Postgres untuk baris yang mereferensikan BARU

  4. Bagaimana menghubungkan ke database PostgreSQL jarak jauh melalui SSL dengan Python

  5. Bagaimana Asinh() Bekerja di PostgreSQL