У меня есть большой файл данных, содержащий уникальную 11-значную ссылку на первую запись каждого связанного подмножества, но не на последующие записи, принадлежащие тем же подмножествам, которые вместо этого содержат поддельную 1 или 2-значную ссылку.Таблица находится в том порядке, в котором она была изначально создана, поэтому подмножества по-прежнему правильно сгруппированы, и поле, содержащее эти ссылки, называется «Старая ссылка».Я только что создал новое поле под названием «New Ref», которое я хочу заполнить всеми соответствующими 11-значными ссылками для каждого подмножества.Как лучше всего этого добиться в сценарии, который я могу запустить на PL / pgSQL?
Вот пример данных как есть (текущих), и как я хотел бы, чтобы они были обновлены:
Current datafile
__________________________________
ID | Old Ref | New Ref
==================================
1 | 14740807000 |
2 | 1 |
3 | 2 |
4 | 3 |
5 | 58 |
6 | 14735113000 |
7 | 1 |
8 | 2 |
9 | 39 |
10 | 4 |
11 | 5 |
12 | 14915146000 |
13 | 9 |
14 | 27 |
15 | 14915146000 |
16 | 3 |
17 | 4 |
==================================
Sought updated datafile
__________________________________
ID | Old Ref | New Ref
==================================
1 | 14740807000 | 14740807000
2 | 1 | 14740807000
3 | 2 | 14740807000
4 | 3 | 14740807000
5 | 58 | 14740807000
6 | 14735113000 | 14735113000
7 | 1 | 14735113000
8 | 2 | 14735113000
9 | 39 | 14735113000
10 | 4 | 14735113000
11 | 5 | 14735113000
12 | 14915146000 | 14915146000
13 | 9 | 14915146000
14 | 27 | 14915146000
15 | 14915175959 | 14915175959
16 | 3 | 14915175959
17 | 4 | 14915175959
==================================
У меня был отличный способ сделать это в MS Access, но он не справился с размером файла данных, который мне нужно обновить, и это одна из причин, по которой я перешел на PostgreSQL.
Вот сценарий MS Access:
Sub UpdateRef()
On Error GoTo ErrorHandler
Dim strSQL, Var1 As String
Dim rs As New ADODB.Recordset
rs.Open "SELECT test.* FROM test", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
rs.MoveFirst
Var1 = rs![Old ref]
rs![New Ref] = Var1
rs.Update
Do Until rs.EOF
'SysCmd acSysCmdUpdateMeter, n
If len(rs![Old ref]) > 2 Then
Var1 = rs![field2]
End If
rs![New Ref] = Var1
rs.Update
rs.MoveNext
Loop
rs.Close
ExitSub:
Set rs = Nothing
Exit Sub
ErrorHandler:
Resume ExitSub
End Sub