@@ -239,34 +239,47 @@ class {classname}(PortalObject): # type: ignore[misc]
239
239
ORDER BY extname;
240
240
"""
241
241
242
- ALEMBIC_SEQUENCE_STATEMENT = """
242
+ ALEMBIC_STANDALONE_SEQUENCE_STATEMENT = """
243
+ WITH seqs AS (
244
+ SELECT c.oid AS seq_oid,
245
+ n.nspname AS schema,
246
+ c.relname AS sequence_name
247
+ FROM pg_class c
248
+ JOIN pg_namespace n ON n.oid = c.relnamespace
249
+ WHERE c.relkind = 'S'
250
+ AND n.nspname NOT IN ('pg_catalog','information_schema')
251
+ AND n.nspname NOT LIKE 'pg_toast%'
252
+ AND n.nspname NOT LIKE 'pg_temp_%'
253
+ )
243
254
SELECT
244
- s.sequence_schema AS schema,
245
- s.sequence_name,
246
- s .data_type,
247
- s .start_value,
248
- s. minimum_value,
249
- s. maximum_value,
250
- s. increment,
251
- s.cycle_option AS cycle,
252
- ps.cache_size
253
- FROM information_schema.sequences s
255
+ s. schema,
256
+ s.sequence_name,
257
+ ps .data_type,
258
+ ps .start_value,
259
+ ps.min_value AS minimum_value,
260
+ ps.max_value AS maximum_value,
261
+ ps.increment_by AS increment,
262
+ ps. cycle,
263
+ ps.cache_size
264
+ FROM seqs s
254
265
JOIN pg_catalog.pg_sequences ps
255
- ON s.sequence_schema = ps.schemaname
256
- AND s.sequence_name = ps.sequencename
257
- JOIN pg_class t
258
- ON t.relkind = 'r' AND t.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = s.sequence_schema)
259
- JOIN pg_attribute a
260
- ON a.attrelid = t.oid
261
- JOIN pg_attrdef d
262
- ON d.adrelid = t.oid AND d.adnum = a.attnum
263
- WHERE
264
- s.sequence_schema NOT IN ('pg_catalog', 'information_schema')
265
- AND pg_get_expr(d.adbin, d.adrelid) LIKE '%nextval(%' || s.sequence_name || '%'
266
- ORDER BY s.sequence_schema, s.sequence_name;
266
+ ON ps.schemaname = s.schema
267
+ AND ps.sequencename = s.sequence_name
268
+ LEFT JOIN pg_depend owned
269
+ ON owned.classid = 'pg_class'::regclass
270
+ AND owned.objid = s.seq_oid
271
+ AND owned.deptype IN ('a','i') -- serial/identity ownership
272
+ LEFT JOIN pg_depend used
273
+ ON used.refclassid = 'pg_class'::regclass
274
+ AND used.refobjid = s.seq_oid
275
+ AND used.classid = 'pg_attrdef'::regclass -- used in a column DEFAULT
276
+ WHERE owned.objid IS NULL
277
+ AND used.objid IS NULL
278
+ ORDER BY s.schema, s.sequence_name;
267
279
"""
268
280
269
281
282
+
270
283
def parse_publication_row (
271
284
row : dict [str , Any ],
272
285
template_def : str ,
0 commit comments