gpt4 book ai didi

postgresql - 如何删除 PostgreSQL 转储中的 LANGUAGE c 函数以便在 CloudSQL 中导入?

转载 作者:行者123 更新时间:2023-11-29 13:11:48 34 4
gpt4 key购买 nike

我想将 Postgres 转储导入 CloudSQL。我实际上使用了 uuid-ossp 扩展,C 语言中的一些函数被导出到我的转储中。

但是... LANGUAGE c 中的函数在云 SQL 上不允许 https://cloud.google.com/sql/docs/postgres/extensions#language我需要将它们从转储中移除。 (请注意,稍后可以通过在 cloudSQL 数据库中激活扩展 uuid-ossp 来重新启用这些功能)

所以...我需要一个技巧来从我的转储文件中删除这些函数。

从包含这些函数的转储中提取:

--
-- TOC entry 542 (class 1255 OID 16529)
-- Name: uuid_generate_v1(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION uuid_generate_v1() RETURNS uuid
LANGUAGE c STRICT
AS '$libdir/uuid-ossp', 'uuid_generate_v1';


--
-- TOC entry 543 (class 1255 OID 16530)
-- Name: uuid_generate_v1mc(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION uuid_generate_v1mc() RETURNS uuid
LANGUAGE c STRICT
AS '$libdir/uuid-ossp', 'uuid_generate_v1mc';


--
-- TOC entry 544 (class 1255 OID 16531)
-- Name: uuid_generate_v3(uuid, text); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION uuid_generate_v3(namespace uuid, name text) RETURNS uuid
LANGUAGE c IMMUTABLE STRICT
AS '$libdir/uuid-ossp', 'uuid_generate_v3';


--
-- TOC entry 545 (class 1255 OID 16532)
-- Name: uuid_generate_v4(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION uuid_generate_v4() RETURNS uuid
LANGUAGE c STRICT
AS '$libdir/uuid-ossp', 'uuid_generate_v4';


--
-- TOC entry 546 (class 1255 OID 16533)
-- Name: uuid_generate_v5(uuid, text); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION uuid_generate_v5(namespace uuid, name text) RETURNS uuid
LANGUAGE c IMMUTABLE STRICT
AS '$libdir/uuid-ossp', 'uuid_generate_v5';


--
-- TOC entry 547 (class 1255 OID 16534)
-- Name: uuid_nil(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION uuid_nil() RETURNS uuid
LANGUAGE c IMMUTABLE STRICT
AS '$libdir/uuid-ossp', 'uuid_nil';


--
-- TOC entry 548 (class 1255 OID 16535)
-- Name: uuid_ns_dns(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION uuid_ns_dns() RETURNS uuid
LANGUAGE c IMMUTABLE STRICT
AS '$libdir/uuid-ossp', 'uuid_ns_dns';


--
-- TOC entry 549 (class 1255 OID 16536)
-- Name: uuid_ns_oid(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION uuid_ns_oid() RETURNS uuid
LANGUAGE c IMMUTABLE STRICT
AS '$libdir/uuid-ossp', 'uuid_ns_oid';


--
-- TOC entry 550 (class 1255 OID 16537)
-- Name: uuid_ns_url(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION uuid_ns_url() RETURNS uuid
LANGUAGE c IMMUTABLE STRICT
AS '$libdir/uuid-ossp', 'uuid_ns_url';


--
-- TOC entry 512 (class 1255 OID 16538)
-- Name: uuid_ns_x500(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION uuid_ns_x500() RETURNS uuid
LANGUAGE c IMMUTABLE STRICT
AS '$libdir/uuid-ossp', 'uuid_ns_x500';

最佳答案

解决方案 1:清理数据库并重新导出转储

(根据@Laurenz Albe 评论编辑)

  1. 对所有LANGUAGE c 函数执行DROP FUNCTION
  2. 转储数据库
  3. 在转储的开头添加CREATE EXTENSION uuid-ossp

解决方案 2:解析并清理转储

不是最好的,但似乎有效。

这是基于这样一个事实,幸运的是,要删除的函数位于 3 行:

# Extract all the language c functions (1 line before and 1 line after the "LANGUAGE c" line
grep -B 1 -A 1 "LANGUAGE c" schema.sql > language-c-functions.sql

# Make the diff between the files, and keep line that are not in both files
diff schema.sql language-c-functions.sql | grep \^\< | sed 's/^<\ //' > cleaned.sql

关于postgresql - 如何删除 PostgreSQL 转储中的 LANGUAGE c 函数以便在 CloudSQL 中导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53780554/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com