sql >> Database teknologi >  >> RDS >> PostgreSQL

Oracle DBMS_LOB.WRITEAPPEND til Postgres-konvertering

Det afhænger af størrelsen på dit store objekt. Når dine store objekter er mindre end 500 MB, behøver du ikke bruge LOB'er (PostgreSQL bruger termen LO), og du kan bruge en text eller varchar type - arbejdet ligner med varchar . Efter denne størrelse skal du bruge LO API.

CREATE OR REPLACE FUNCTION writeappend(oid, text)
RETURNS void AS $$
DECLARE
  content bytea;
  fd int;
BEGIN
  content := convert_to($2, getdatabaseencoding());
  fd := lo_open($1, 131072);
  PERFORM lo_lseek(fd, 0, 2);
  IF length(content) <> lowrite(fd, content) THEN
    RAISE EXCEPTION 'not all content was written';
  END IF;
  PERFORM lo_close(fd);
END;
$$ LANGUAGE plpgsql;

postgres=> select lo_creat(-1);
┌──────────┐
│ lo_creat │
╞══════════╡
│    20653 │
└──────────┘
(1 row)

postgres=> select writeappend(20653, e'Hello\r\n');
┌─────────────┐
│ writeappend │
╞═════════════╡
│             │
└─────────────┘
(1 row)

postgres=> select writeappend(20653, e'Hello\r\n');
...

postgres=> select convert_from(lo_get(20653),getdatabaseencoding());
┌──────────────┐
│ convert_from │
╞══════════════╡
│ Hello\r     ↵│
│ Hello\r     ↵│
│              │
└──────────────┘
(1 row)

Så du kan bruge LO API, men grundlæggende typer bør foretrækkes. Grænserne for disse typer er normalt gode nok - og arbejde med basistyper er meget mere behageligt - med nogle muligheder som fuldtekst.




  1. MySQL InnoDB Cluster 8.0 - En komplet gennemgang af operationen:Anden del

  2. Postgresql og jsonb - indsættelse af en nøgle/værdi i et multi-level array

  3. Lås MySQL-valgrækken, indtil UPDATE er blevet kørt på den?

  4. Konvertering af mysql-tabel til spark-datasæt er meget langsom sammenlignet med samme fra csv-fil