sql >> Database >  >> RDS >> PostgreSQL

Oracle DBMS_LOB.WRITEAPPEND naar Postgres-conversie

Het hangt af van de grootte van uw grote object. Als uw grote objecten minder dan 500 MB zijn, hoeft u geen LOB's te gebruiken (PostgreSQL gebruikt de term LO) en kunt u een text gebruiken of varchar type - het werk is vergelijkbaar met varchar . Na deze grootte moet u de LO API gebruiken.

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)

U kunt dus LO API gebruiken, maar basistypen hebben de voorkeur. De limieten voor deze typen zijn meestal goed genoeg - en werken met basistypen is veel comfortabeler - met enkele mogelijkheden zoals fulltext.




  1. Maak een bash-script voor het bewaken van MySQL-query's

  2. Hang in Python-script met SQLAlchemy en multiprocessing

  3. Hoe deze MySQL-tabel verder te optimaliseren voor een enkele query

  4. MySQL INSERT-instructie in twee tabellen, met AI-waarde van de ene in de andere